2015-08-03 221 views
-1

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 

但循环不会退出

+4

首先,开始正确地格式化您的代码。其次,请查阅'scanf'的文档,第三,退出忽略它的返回值。 –

+0

读取一行输入并使用'strtok()'来解析它。 – Barmar

+0

[这里](http://www.cplusplus.com/forum/beginner/2624/)是一个很好的网站。有一个有趣的程序。你可以玩它并从中学习。 :) –

回答

1

这是怎么回事?

while(scanf("%d", &x) != EOF) { 
    printf("%d",x); 
    if (getchar() == '\n') break; 
} 
4

%d转换符从未\n到缓冲区。它读取缓冲区中的\n,并将其留在那里。所以,这是本质上一个无限循环。

您可能需要使用格式说明符,如%c,其实际上读取并存储\n

尽管如此,如果我可以建议,尽量使getchar(),其内容从标准输入的下一个字符返回值作为int使用。但是,对于输入为的数字,您需要相应地解析和存储整数和/或浮点值,但它肯定会为您提供更大的灵活性。

+0

如何使用getchar()? – user3550981

+0

@ user3550981:你可能喜欢在这里RTFM:http://man7.org/linux/man-pages/man3/ungetc.3.html – alk

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; 
} 
0
while(scanf("%d",&x) != EOF) { 
    printf("%d",x); 
} 

...会做到这一点。不要忽略scanf返回。你的代码循环的原因是你真的把10与十进制值('\ n')进行比较。此外,请记住,您要求scanf给你整数,这就是它给你的,它不会给你换行符,即使它可以。

已编辑,以便我特别添加了与EOF的比较。 您需要记住scanf扫描一个流,在这种情况下,输入流,它将不会返回,直到流完成。

你应该真的使用字符串和sscanf()来做你想做的事情。

+0

不..它不工作。循环仍然没有退出。它打印输入但不退出。 – user3550981