它应该给我输入用户输入的数量。但它给出了100.我用gcc编译。
#include <stdio.h>
int arr[100];
int count=0;
int max=100;
int main(){
int i, input;
printf("Enter integer values one by one, q to quit.\n");
for(i=0;i<max;i++){
scanf("%d",&input);
arr[i]=input;
if(input=='q')break;
count++;
}
printf("You entered %d values.\n",count);
return 0;
}
答案 0 :(得分:5)
如果您正在读取数字变量,它实际上不能具有值'q',因此您的测试将无效。如果你想编写这样的代码,你应该将用户输入读入字符串,检查字符串是否包含“q”,如果没有将其转换为整数。
答案 1 :(得分:3)
scanf
具有返回值。用它来测试scanf是否真的能够解析任何东西。在您的场景中,'q'永远不会存储在变量input
中,因为它是char或数字表示。您不能将“q”读作“%d”,因此scanf将无声地失败。
测试scanf的返回值以决定break
。
答案 2 :(得分:1)
scanf%d不理解'q'。您可以检查scanf的返回值 - 如果它返回0,则用户没有输入有效数字。
如果只有q而不是其他非数字字符串应该终止循环,请读入一个字符串并检查它是否为q,如果没有将其转换为带有atoi()的int。
答案 3 :(得分:0)
可爱。输入'q'
会导致scanf失败,并且无论最后一个值是什么,都会留下input
。这个破碎的循环继续到范围的末尾。当然,测试input=='q'
永远不会成功。
答案 4 :(得分:0)
:) 让我修改这个程序:
#include <stdio.h>
int arr[100];
int count=0;
int max=100;
int main(){
int i, input;
printf("Enter integer values one by one, -1 to quit.\n");
for(i=0;i<max;i++){
scanf("%d",&input);
arr[i]=input;
if(input==-1)break;
count++;
}
printf("You entered %d values.\n",count);
return 0;
}
您不能使用数字var来获取char值。 如果您像这样更改它,它将起作用。 :)
答案 5 :(得分:0)
scanf将在代码中返回0。但是,scanf的下一次调用将在最后一次转换后的字符后立即恢复搜索。因此,您可以尝试以下代码:
#include <stdio.h>
int arr[100];
int count=0;
int max=100;
int main(){
int i, input, ret;
char end;
printf("Enter integer values one by one, q to quit.\n");
for(i=0;i<max;i++)
{
ret = scanf("%d",&input);
if (!ret)
{
scanf("%c", &end);
if ( end == 'q')
break;
else
continue;
}
arr[i]=input;
count++;
}
printf("You entered %d values.\n",count);
return 0;
}
通过执行此操作,您可以确保控件不会从循环中退出,除非您输入q并且只将合法值复制到数组中。
答案 6 :(得分:-1)
通过输入'q'的ascii值而不是q /
退出程序