2010-12-03 86 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. 最后,如果用户没有从文件中输入匹配的行,那么您似乎会随机写入最后一行。