2012-03-07 126 views
-2
int t,r,c; 
    int matrix[100][100][100]; 
    int i,j,k=0,l=0; 
    int te,ck=0; 
    scanf("%d",&t); 
    for(te=0;te<t;te++) 
    { 
      printf("RC"); 
      scanf("%d %d",&r, &c); 
      for(i=0;i<r;i++) 
      { 
        for(j=0;j<c;j++) 
        { 
          printf("te= %d i= %d j= %d",te,i,j); 
          fflush(stdin); 
          matrix[te][i][j] = getchar(); 
        } 
      } 
    } 

樣品O/P嵌套循環:當被執行時

[email protected]:~/Desktop$ ./spoon.o 
3 
RC3 
6 
te= 0 i= 0 j= 0te= 0 i= 0 j= 1 

控制直接詢問對於j = 1和j = 0是skipped.WHY值內循環一次跳過?

+1

你不應該用編譯'.o'擴展您的可執行文件。 '.o'用來表示一個目標文件。 – meagar 2012-03-07 19:43:38

+0

請注意,'fflush(stdin)'只在Windows上真正定義(儘管Linux手冊頁也引用了這種可能性,但它並不清楚它的實際工作原理)。 C標準使其不確定。 – 2014-04-13 04:47:53

回答

2

fflush(stdin)不是清除輸入緩衝區的方法。 使用:

void flushInputBuffer(void) 
{ 
    int c; 
    while((c = fgetc(stdin)) != EOF && c != '\n'); 
} 
+0

你的回答是完全正確的,但是你可以用'fflushstdin'來命名你的函數嗎? ;第這不是一個沖洗操作,所以也許一個名字像'漏'或什麼的會更好。 – FatalError 2012-03-07 19:41:41

+0

@FatalError:哈哈,完成!^_ ^ – noMAD 2012-03-07 19:53:44

1

這是因爲getchar()仍然會看到您在6之後輸入的換行符,因此它不需要阻止並等待更多輸入。我想getchar()不是你需要調用的函數。

0

將stdin傳遞給fflush()不正確。它只能用於輸出流。

這不是從你的輸出清楚地知道,但如果你輸入了3 <進入在RC提示符下輸入>,第一的getchar()被抓住,你在該行的末尾輸入換行符。

嘗試修改此行:

scanf("%d %d",&r, &c); 

要這樣:

scanf("%d %d\n",&r, &c);