我被困在练习中。每当我在输入中输入斜线(/
(时,循环就不会结束。
是否可以检查输入数据类型?因此,如果是数字,则show()
执行。当是character('/')
时,然后退出。
#include <stdio.h>
#include <stdlib.h>
void show(int);
int main(){
int quit = 0;
printf("Enter a number to display: n* times the input numbern");
printf("Enter '/' to exit.n");
printf("======================nn");
while(!quit) {
printf("Input: ");
int input;
scanf("%d", &input);
if (input == '/')
quit = 1; // Suppose to exit when input = '/'
else
show(input);
printf("nn");
}
}
void show(int n) {
for (int i=1; i<=n; i++)
printf("*");
}
您在while循环内部的输入类型有错误:
int input;
scanf("%d", &input);
在此处输入'/'导致行为要求INT!
相反,您必须让输入为 String (键入 char *
(, check 是手动还是通过strncmp(input, "/", 1)
等于字符串('/'(如果它代表整数,然后使用strtol(input, NULL, 10)
创建另一个int value 如果输入是有效的,并且不等于'/'.
可能会涉及错误检查(不幸的是(,例如处理外部字符,并验证您的号码以REGEX的形式 - ?( d((数字字符串之前的单个可选减符号(。
<</p>scanf
中的%d
期望int
数据类型。输入'/'
时,它会跳过'/'
并查找int
数据类型。它一无所获,此''
留在缓冲区中。在下一个迭代中,它找到了相同的char
类型,然后再次跳过此字符,并且该周期继续引起无限环路。
如果要与'/'
进行比较,则应使用char
变量,而不是int
。因此,将"%c"
用作scanf()
的格式字符串。否则,scanf()
不会读取您的'/'
,因为它不是整数。
此片段将具有您期望的行为:
while (!quit) {
char input;
scanf("%c", &input);
if (input == '/')
quit = 1;
如果您阅读了数字,则可以将0
(48
或'0'
(的ASCII值减去char
,因此您最终将获得其int
等效:
show(input - '0');
show(input - 48);
您应该将%c
用于单个字符或%s
用于字符串,%d
正在寻找一个数字。