簡體   English   中英

使用文件從陣列中刪除空白

[英]Removing blanks from an array using files

void read_input(FILE* inputfile,char array[]) {
     int nscan;
     char termch;
     while(TRUE) {
        nscan = fscanf(inputfile,"%30[^\n]%c",array,&termch);
        if (nscan == EOF)
          break;
        if (nscan != 2 || termch != '\n' ){
          printf("error  \n");
        }
     }
}

這是我的代碼,由於nscan值為2,請問有誰能幫助我找出為什么顯示我添加的error消息?

這個:

if (nscan != 2 || termch != '\n' ){
  printf("error  \n");
}

說:

如果nscan不是2打印錯誤。 如果termch不是換行符,則打印錯誤。 這是因為您正在使用OR邏輯運算符|| 這說明了您得到的行為。

因此,如果要查看更多內容,只需在到達該if語句之前打印兩個變量的值即可。 當然, termch與換行符有所不同。

記住在Windows和DOS上,換行符實際上是2個字符,而不僅僅是一個字符...

記住輸入行可能大於29個字符,這將導致第二個參數不包含換行符...

記住輸入行可能包含一些white space例如空格或制表符,那么對fscanf()的調用將失敗。

關於這些行:

if (nscan != 2 || termch != '\n' ){
      printf("error  \n");
}

如果條件為or

or表示如果任一部分為真,則結果為真。

因此,當termch!='\\ n'為true時,將執行封閉的函數體。

建議將“ if”語句修改為:

if (nscan != 2 ) 
{
    printf( "fscanf failed to read both parameters\n");
}
else if(termch != '\n' ) 
{
    printf( "fscanf failed to read the complete line\n");
}

這樣就可以輸出有意義的消息。


而且,while()循環和封閉的代碼還有一點不足。

建議:

while(1)
{
    if( 1 != (nscan == fscanf(inputfile,"%30[^\n]\n",array) ) )       
    { 
        perror( "fscanf failed to read full line of input" );
    }
}

當然,如果輸入行大於29個字符,則將輸出錯誤消息,並且循環的下一次迭代將讀取行的其余部分。

暫無
暫無

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

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