2010-12-03 62 views
0

我在C新型..並且仍然具有語法麻煩,希望你能幫助我......因爲我在這個代碼困惑的C語法

#include<stdio.h> 
#include<stdlib.h> 
#include<string.h> 

int main(void){ 
    FILE *stream = NULL; 
    stream = fopen("studentinfo.txt", "a+"); 
    /*some of initialization were used for testing purposes only*/ 

    char arr[5]; 
    char arr2[5]; 
    int i; 
    char name[3]; 
    char course[5]; 

    printf("enter details: "); 
    scanf("%s", arr2); 

    while(!feof(stream)){ 
     fgets(arr, 100, stream);//i am confused if the line capture was stored at arr[0] 
     if(strcmp(arr, arr2)==0){//i want to compare 
      printf("success");//testing 
     } 
     printf("%s", arr);//i wonder does fgets just overwrites the new line to arr[0] 
    } 

    fclose(stream); 

    getch(); 
} 

感謝球員很卡.. 。

+1

試着將所有的代碼格式化爲代碼,它會幫助我們來幫助你。問一些具體的問題 - 你告訴我們的是,你仍然在語法上遇到問題。這種邀請的迴應是'閱讀許多優秀的在線教程或解釋C語法的書籍之一'。 – 2010-12-03 09:29:40

+0

有什麼問題?你想要它做什麼?你得到了什麼錯誤? – Muggen 2010-12-03 09:30:18

+0

@ muggen:我實際上被指示去做一個學生信息系統......而且我在編輯其中一行時遇到了麻煩......我們被要求稍後向用戶詢問學生ID並編輯信息。 。我正在考慮首先捕獲該行,然後將其與用戶的輸入進行比較...希望您可以提前幫助我... thnx – iamanapprentice 2010-12-03 09:45:24

回答

2

如果您有現有的文件...並且您的文件有數據。那麼你可以檢查你輸入的數據是否存在於文件中。我不確定這是否是你想要的。

例如,如果您鍵入...... love 和文件還包含了確切的詞...... love(一行) 然後將打印「成功」。

如果您輸入的數據不存在於文件中,它將被附加在文件上(在下一行)。

int main(void){ 

char arr[5]; 
char arr2[5]; 
int i; 
int n=0; 

FILE *stream = NULL; 
FILE *append = NULL; 
stream = fopen("studentinfo.txt", "rt"); 
append = fopen("studentinfo.txt", "a+"); 

printf("enter details: "); 
scanf("%s", arr2); 

while(!feof(stream)){ 
    fgets(arr, 6, stream); 
    if(strcmp(arr, arr2)==0){ 
     printf("success"); 
    } else n=-1; 
} 
if (n==-1){ 
    fprintf(append, "%s\n", arr2); 
} 
fclose(stream); 
fclose(append); 
system("pause"); 
} 
6
  1. 你打開studentinfo.txt進行追加,但隨後從中讀取(和你不檢查打開成功
  2. 你分配5個字符ARR的,但讀最多100個字符進入它與fgets。這將溢出並導致內存損壞
  3. 你已經爲arr2分配了5個字符,但是讀入了任意數量的字符 - 這會溢出並導致內存損壞
  4. Fgets從arr開始讀取字符到內存中。 arr [0]是第一個字符。 & arr [0]與arr相同
  5. getch()最後是什麼?
  6. 此外,「a +」將流定位在文件的末尾,因此您將無法讀取任何內容。
+0

5。可能會停止立即終止該計劃,並使其能夠看到「成功」 – Muggen 2010-12-03 09:34:42

1
  1. 我不知道爲什麼你是一個+,因爲你從來沒有真正寫它打開流。也許你想確保文件存在,即使0長度?你仍然應該檢查打開成功,但。

  2. 然後,您將100個字符讀入一個只有5個字節的數組中,這樣如果文件確實包含該數字,您將得到嚴重的內存覆蓋。

  3. 當然,scanf也是不安全的,因爲用戶可能會輸入太多字符(實際上它們被限制爲4,因爲有一個NULL結束符被讀取)。

  4. 最後,如果用戶沒有從文件中輸入匹配的行,那麼您似乎會隨機寫入最後一行。