2012-03-19 132 views
2

我在ansi c学习C,我有一个问题。C在输入键停止

我该如何停止从控制台读取当用户打印输入。

理想情况下,用户键入5,则该程序输出后马上进入这个

1 2 3 4 5 

1 
2 
3 
4 
5 

我有这样的代码:

#include <stdio.h> 
#include <stdlib.h> 

#define SIZE 5 

int main() 
{ 
    int vector[SIZE] = {0}, number, counter = 0,i; 

    while (scanf("%d", &number) != EOF && counter < SIZE){ 
     vector[counter] = number; 
     counter++; 
    } 

    for (i = 0; i < counter; i++){ 
     printf("%d\n", vector[i]); 
    } 

    return 0; 
} 

现在,该计划如果我输入1 2 3 4 5,然后按ENTER,它不会停止,如果我输入1 2 3 4 5 6它程序停止。

两件事。

我相信条件扫描,直到EOF它不是什么都不做。第二,程序因为counter < SIZE

而停止,那么在用户点击进入后该如何停止?

感谢

回答

3

一种选择是交换你的条件的顺序:

while (counter < SIZE && scanf("%d", &number) != EOF){ 

由于是evalulated左到右,你的程序的新的输入等待(通过scanf(%d...)),其评估counter < SIZE之前的条件。这个改变会导致程序在键入5之后立即退出while循环,在用户按下回车之前,因为它在处理5之后评估counter < SIZE

(如果你选择了这个选项,你还会要你开始重复号码之前打印的底线字符,因为用户将不会按输入它开始打印前)


如果您当用户按下输入时,希望程序退出循环,则必须更改scanf。 scanf(%d...读取一个数字,并且结束字符是而不是的数字。

0

请检查输入的最后一个字符,看看它的一个\nENTER并不构成EOF,它通常是一个\n字符。

1

这里有一个办法把我的头顶部(警告,未经测试):

int number; 
char nl = 0; 

while (counter < 5 && scanf("%d%c", &number, &nl) != EOF) 
{ 
    ... 
    /** 
    * If we picked up a newline, exit the loop. 
    */ 
    if (nl == '\n') 
    break; 
}