在“输入”处停止循环;0“;在C中
我试图做一个循环,在这个循环中,用户被要求提供汽车型号和年份。循环应该以输入“0”结束,但我无法使其工作,相反,循环继续进行。 我的代码如下所示:在“输入”处停止循环;0“;在C中,c,C,我试图做一个循环,在这个循环中,用户被要求提供汽车型号和年份。循环应该以输入“0”结束,但我无法使其工作,相反,循环继续进行。 我的代码如下所示: char model; int year; while (model != '0') { printf("Input model name (0 quits): "); scanf("%s", &model); if (model == '0') { break;
char model;
int year;
while (model != '0') {
printf("Input model name (0 quits): ");
scanf("%s", &model);
if (model == '0') {
break;
} else {
printf("Input year: ");
scanf("%d", &year);
...
我也尝试过使用atoi()和isdigit(),但似乎没有任何效果。有什么想法吗?你好,未定义的行为 好的,那么问题是用
%s
将单个字符的地址传递给scanf
。那不太管用
我们想要的是:
char model[16];
while(1) { /* or your preferred infinite loop here */
printf("Input model name (0 quits): ");
fgets(model, 16, stdin);
if (model[0] == '0') break;
/* continuing on your input */
printf("Input year: ");
scanf("%d", &year);
...
}
因此,我们要做的是用fgets
读取行中的内容,然后检查后面的0,并在0上中断循环。此代码跟随您的线索,不会清理您的输入
读一个字符并没有什么好办法,因为你需要去掉换行符
实际上,我建议将整个过程转换为
fgets()
,但每次只执行一步。model
在第一次迭代的循环开始时未初始化。而且model
是字符,因此您应该使用%c
格式选项和scanf
,而不是用于字符串的%s
代码>是未定义行为的配方。即使是一个输入字符也会覆盖您不拥有的内存(实际上存储了两个:一个用于字符,一个用于终止符,而您只为一个字符传递内存)。如果您正在读取单个字符,为什么不使用fgetc(stdin)
,存储在int
中,并测试EOF,而不是假设读取工作正常?请仔细阅读scanf的“%c”
和“%s”之间的差异。