2012-03-19 134 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; 
}