簡體   English   中英

C停止輸入鍵

[英]C stop at enter key

我正在用ansi 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停止

那么,在用戶點擊進入后如何停止?

謝謝

一種選擇是交換條件的順序:

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

當條件從左到右求值時,您的程序將等待新輸入(通過scanf(%d... )),然后才評估counter < SIZE 此更改將導致在鍵入5后,程序在用戶按下Enter之前立即退出while循環,因為在處理5后,它會評估counter < SIZE

(如果選擇此選項,您還將希望在開始重復數字之前先打印一個結束符,因為用戶在開始打印之前不會按回車鍵)


如果要讓程序在用戶按下Enter鍵時退出循環,則必須更改scanf。 scanf(%d...讀取一個數字,並且結束符不是數字。

這是我無法解決的一種方法(警告,未經測試):

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;
}

嘗試檢查輸入的最后一個字符以查看其是否為\\n ENTER不構成EOF ,通常是\\n字符。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM