我被困在练习中。每当我在输入中输入斜杠(/
)时,循环就不会结束。
是否可以检查输入数据类型?因此,如果它的编号,那么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 number\n");
printf("Enter '/' to exit.\n");
printf("======================\n\n");
while(!quit) {
printf("Input: ");
int input;
scanf("%d", &input);
if (input == '/')
quit = 1; // Suppose to exit when input = '/'
else
show(input);
printf("\n\n");
}
}
void show(int n) {
for (int i=1; i<=n; i++)
printf("*");
}
答案 0 :(得分:1)
如果您想与'/'
进行比较,则应使用char
变量,而不是int
。因此,使用"%c"
作为scanf()
的格式字符串。否则,scanf()
将无法读取您的'/'
,因为它不是整数。
此代码段将具有您期望的行为:
while (!quit) {
char input;
scanf("%c", &input);
if (input == '/')
quit = 1;
如果你读了一个数字,那么你可以将0
(48
或'0'
)的ASCII值减去你的char
,这样你就会得到{ {1}}等价物:
int
答案 1 :(得分:1)
%d
中的 scanf
需要int
数据类型。当您输入'/'
时,它会跳过'/'
并查找int
数据类型。它什么也没找到,这个'\'
留在缓冲区中。在下一次迭代中,它会找到相同的char
类型并再次跳过此字符,这个循环继续导致无限循环。
答案 2 :(得分:1)
有关while循环内输入类型的错误:
int input;
scanf("%d", &input);
在此处输入'/'会导致未定义行为,因为它要求输入int!
相反,您必须让输入为字符串(类型char *
),检查字符串是否等于('/')手动或通过strncmp(input, "/", 1)
,检查它是否代表一个整数,然后使用strtol(input, NULL, 10)
创建另一个int值,如果输入有效且不等于'/',则转换为int。 / p>
错误检查可能涉及(不幸的是),例如处理外来字符,并验证您的号码是正则表达式的形式 - ?(\ d)(数字字符串前的单个可选减号)。
答案 3 :(得分:0)
您应该将%c
用于单个字符,或%s
用于字符串,%d
正在寻找一个数字。