2013-10-05 76 views
0

我應該寫在這裏指定的程序:我必須按CTRL + D兩次才能結束輸入,爲什麼?如何更正?

 
Input 

The input will consist of a series of pairs of integers a and b,separated by a space, one pair of integers per line. you should read the input until EOF. 
Output 

For each pair of input integers a and b you should output the sum of a and b in one line,and with one line of output for each line in input. 
Sample Input 

1 5 
7 2 

Sample Output 

6 
9 

一個我這樣寫:

 
    #include

main() { 
int a, b; 
int sum[100]; 
int i,j; 
char c; 

for(i=0; i<100; i++) sum[i]=0; 

i=0; 
do { 
    scanf("%d %d", &a, &b); 
sum[i]=a+b; 
    i++; 
    } while((c=getchar())!=EOF); 

for(j=0; j<i-1; j++) printf("%d\n", sum[j]); 
} 

什麼怪對我來說是:我爲什麼要按CTRL + d(EOF )兩次結束輸入?有沒有更好的方法來編寫這段代碼?

+0

一個EOF用於'scanf'函數,一個用於'getchar'。你需要重新組織你的程序,所以它不會再等兩次。 –

回答

0

你的第一個CTRL-d打破了scanf函數。之後你的程序在getchar中等待。如果您檢查scanf的輸出,您只有一張支票。

#include <stdio.h> 


main() { 
    int a, b; 
    int sum[100]; 
    int i,j; 
    char c; 

    for(i=0; i<100; i++) sum[i]=0; 

    i=0; 
    while (2==scanf("%d %d", &a, &b)) 
    { 
     sum[i]=a+b; 
     i++; 
    } 

    for(j=0; j<i-1; j++) printf("%d\n", sum[j]); 
} 
0

您的密碼不應該依賴EOFgetchar()命中。更改此:

do { 
    scanf("%d %d", &a, &b); 
    ... 
} while((c=getchar())!=EOF); 

到:

do { 
    if (scanf("%d %d", &a, &b) != 2) 
     break; 
    ... 
} while((c = getchar()) != EOF); 

或者你可能會忽略getchar()調用完全:

while (scanf("%d %d", &a, &b) == 2) { 
    ... 
} 
0

scanf()讀取您的輸入線,它會讀取兩個數字,但它留下的是終止輸入流中的行換行。然後當getchar()讀取下一個字符時,它讀取換行符。由於換行符不是EOF,它將返回到循環的開頭。

現在再次運行scanf(),它會看到您在換行符後鍵入的EOF。它返回而不更新變量。然後再次調用getchar(),並且必須鍵入另一個EOF才能獲取它。

相關問題