我是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();
}
谢谢你们......
答案 0 :(得分:6)
答案 1 :(得分: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");
}
答案 2 :(得分:1)
我不确定为什么要用+打开流,因为你实际上从未写过它。也许你想确保文件存在,即使0长度?你应该仍然检查打开是否成功。
然后您将100个字符读入一个只有5个字节的数组中,这样如果文件确实包含该数字,您将获得严重的内存覆盖。
scanf当然也不安全,因为用户可能输入太多字符(实际上它们限制为4,因为有一个NULL终结符被读取)。
如果用户没有从文件中输入匹配的行,则最后您似乎是随机写入最后一行。