[英]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.