C在输入键处停止

时间:2012-03-19 16:11:05

标签: c

我正在学习C语言,我有一个问题。

当用户打印输入时,我将从控制台停止阅读。

理想情况下,用户将输入此

1 2 3 4 5

并且在输入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 个答案:

答案 0 :(得分:3)

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

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

当条件从左向右评估时,您的程序在评估scanf(%d...之前等待新输入(通过counter < SIZE))。此更改将导致程序在键入5之后立即退出while循环,在用户按Enter之前,因为它在处理5之后评估counter < SIZE

(如果选择此选项,您还需要在开始重复数字之前打印结束字符,因为用户在开始打印之前不会按E​​nter键。


如果您希望程序在用户按Enter键时退出循环,则必须更改scanf。 scanf(%d...读取数字,而结束字符数字。

答案 1 :(得分: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;
}

答案 2 :(得分:0)

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