while循环没有退出`while(x!='\ n')`

时间:2015-08-03 12:09:15

标签: c

为什么这个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 

但循环不退出

4 个答案:

答案 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)

为什么不使用argvstrtol

#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()来做你想做的事。