TLDR:在使用 EOF 時,我需要檢查我使用 scanf 掃描到陣列中的輸入是否真的是一個整數。
我需要將數字掃描到陣列中直到 EOF。我正在用靜態分配的記憶體做所有事情,因為我是一個初學者,現在動態分配的記憶體對我來說很難理解。我還使用 getc 在末尾獲取“\n”輸入(但這不是問題 - 只是這樣說,所以你知道)。我的第一個想法是:
while(scanf("%d", &number[i][j]) != EOF )
**some code**
但是這個解決方案不檢查輸入是否為整數。例如,如果我的輸入是。
1 2 3
4 0 5
2 3 a
代碼不會停止,因為最后一個陣列的值為 0,直到我將一個數字掃描到其中。我的解決方案是
while(1)
if(scanf("%d", &number[i][j]) != 1)
printf("Incorrect input.\n");
return 0;
但是由于 EOF 等于 -1,這意味著即使在我不想要的檔案末尾我也會收到輸入。那么有沒有什么辦法可以有更多的條件來比較scanf呢?例如(我知道這行不通,但為了幫助您理解我的意思):
while(1)
if(scanf("%d", &number[i,j] != 1 && scanf("%d", &number[i,j]) != EOF)
printf("Incorrect input.\n");
return 0;
但是這個“解決方案”接受了兩次輸入。我還在這個網站上找到了一些答案,建議使用其他方式代替 scanf 輸入,但我需要專門使用 scanf 函式。
uj5u.com熱心網友回復:
您可以將 的回傳值保存scanf到型別的變數中int,稍后再對其進行進一步測驗:
int val, ret;
while ( ( ret = scanf( "%d", &val ) ) != EOF )
{
if ( ret != 1 )
{
printf( "Incorrect input.\n" );
exit( EXIT_FAILURE );
}
//input is ok, so do something with the input value
DoSomethingWithValue( val );
}
//if this line of code is reached, then EOF has been encountered
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/536611.html
標籤:数组C输入扫描伊夫
