为什么这个while循环没有退出?
我想从用户输入一系列数字,然后逐个使用它们进行进一步处理。我没有数字列表的大小。有人可以告诉我怎么做吗?
#include<stdlib.h>
#include<stdio.h>
int main()
{
int x;
scanf("%d",&x);
while(x!='\n')
{
printf("%d",x);
scanf("%d",&x);
}
return 0;
}
示例:
输入:
3 5 6
输出:
3 5 6
实际输出:
3 5 6
但循环不退出
答案 0 :(得分:4)
%d
转换说明符永远不会将\n
存储到缓冲区中。它读取缓冲区中的\n
并将其保留在那里。所以,这本质上是一个无限循环。
您可能需要使用%c
之类的格式说明符,它实际上读取并存储\n
。
虽然,如果我建议,请尝试使用getchar()
,它会从标准输入中读取下一个字符并将值返回为int
。但是,对于 digits 的输入,您需要相应地解析和存储整数和/或浮点值,但它肯定会为您提供更大的灵活性。
答案 1 :(得分:1)
这个怎么样?
while(scanf("%d", &x) != EOF) {
printf("%d",x);
if (getchar() == '\n') break;
}
答案 2 :(得分:0)
为什么不使用argv
和strtol
?
#include <stdlib.h>
#include <stdio.h>
int main(int argc, char **argv) {
int i = 0, x;
for(i = 1; i < argc; i++) {
x = strtol(argv[i],NULL,10);
printf("%d\n",x);
}
return 0;
}
答案 3 :(得分:0)
while(scanf("%d",&x) != EOF) {
printf("%d",x);
}
......会这样做的。不要忽略scanf返回。您的代码循环的原因是您真正将x与十进制值10('\ n')进行比较。此外,请记住,您曾要求scanf为您提供整数,这就是它为您提供的内容,即使可能,也不会为您提供换行符。
已编辑,因此我特意添加了与EOF的比较。 您需要记住scanf扫描一个流,在这种情况下是输入流,它将在该流完成之前返回。
你应该真正使用字符串和sscanf()来做你想做的事。