2015-11-23 48 views
0

我想通過getchar()讀取第一行,但編譯器告訴我數組A是int類型。如何使用getchar來保存我的第一行字符char?通過c中的getchar()讀取第一行

#include <stdio.h> 

int main(void) { 
    FILE *fp; 
    int i=0; 
    char A[200]; 
    int c; 

    fp = fopen("input.txt", "r"); 

    while ((c=getchar()) != '\n') && i<200) { 
     A[i]=(char)c; 
     i++; 
    } 
    for(i=0; i<200; i++) { 
     printf("%s", A[i]); 
    } 
} 
+0

'字符A [200]一試;'*是*'詮釋A [200];'你編輯了5分鐘的時間內將q前限制,但它使問題變得無稽之談。請發佈**你的實際代碼**不要移動沙子。如*所示,「編譯器告訴我數組A是int類型」* –

+1

使用'%c',而不是'%s'。 –

+0

我做了它,並有輸出 ȡ, , .N= @ t, ȡ, [email protected] @@@ :) – deszczpoburzy

回答

2

您的閱讀是(幾乎)很好,最大的問題是打印

但是在修復之前,您應該將getchar的電話更改爲fgetc(fp)--因爲您使用的是fopen,因此您可能需要這麼做。

如果要打印逐行字符,則需要使用%c而不是指定的%s格式,並在達到所讀取字符串的長度時停止迭代。 %s說明符也沒有問題,只要您以null結束字符串即可。它可以讓你避免環路,太:

A[i] = '\0'; 
printf("%s\n", A); 

隨着打印出的方式,這裏有你需要修復一些其他的東西:

  1. 額外撥款char爲空終止:

    char A[201]; 
    

你也可以停止閱讀後在循環達到199字。

  • 確保當你到達EOF程序停止閱讀:

    while ((c=fgetc(fp)) != '\n') && c != EOF && i<200) { 
        ... 
    } 
    
  • 0

    正如dasblinkenlight說,%s的符用於字符串,而%c用於字符。因此,您的打印語句應該是

    printf("%c\n",A[I]); 
    

    爲了確保該文件還沒有結束,你也可以在你的while循環使用

    !feof(fp) 
    

    。如果您正在閱讀的文件包含少於200個字符,則會遇到問題。 feof函數檢查文件的結尾,以確保文件結束後不會讀取數據。

    0

    你可以把它像這樣的東西

    #include <stdio.h> 
    int main(void) 
    { 
        FILE *fp; 
        int i=0; 
        char A[200]; 
        int c; 
    
        fp = fopen("input.txt", "r"); 
    
        while ((c=getchar()) != '\n' && i<200) 
        { 
         A[i]=(char)c; 
         i++; 
        }; 
        for(int j=0; j<i; j++) // print only those item available in array 
        { 
         printf("%c", A[j]); 
        } 
    }