while while(x!='\ n')不会退出while循环不退出?
while while循环不退出?while while(x!=' n')不会退出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
但循环不会退出
这是怎么回事?
while(scanf("%d", &x) != EOF) {
printf("%d",x);
if (getchar() == '\n') break;
}
的%d
转换符从未店的\n
到缓冲区。它读取缓冲区中的\n
,并将其留在那里。所以,这是本质上一个无限循环。
您可能需要使用格式说明符,如%c
,其实际上读取并存储\n
。
尽管如此,如果我可以建议,尽量使getchar()
,其内容从标准输入的下一个字符和返回值作为int
使用。但是,对于输入为的数字,您需要相应地解析和存储整数和/或浮点值,但它肯定会为您提供更大的灵活性。
如何使用getchar()? – user3550981
@ user3550981:你可能喜欢在这里RTFM:http://man7.org/linux/man-pages/man3/ungetc.3.html – alk
为什么不使用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;
}
while(scanf("%d",&x) != EOF) {
printf("%d",x);
}
...会做到这一点。不要忽略scanf返回。你的代码循环的原因是你真的把10与十进制值('\ n')进行比较。此外,请记住,您要求scanf给你整数,这就是它给你的,它不会给你换行符,即使它可以。
已编辑,以便我特别添加了与EOF的比较。 您需要记住scanf扫描一个流,在这种情况下,输入流,它将不会返回,直到流完成。
你应该真的使用字符串和sscanf()来做你想做的事情。
不..它不工作。循环仍然没有退出。它打印输入但不退出。 – user3550981
首先,开始正确地格式化您的代码。其次,请查阅'scanf'的文档,第三,退出忽略它的返回值。 –
读取一行输入并使用'strtok()'来解析它。 – Barmar
[这里](http://www.cplusplus.com/forum/beginner/2624/)是一个很好的网站。有一个有趣的程序。你可以玩它并从中学习。 :) –