#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
struct info
{
char name[15];
char surname[15];
char gender[15];
char education[15];
} sem;
FILE *fp=NULL;
int i, a;
char tmp[256] = {0x0};
while(1)
{
printf("Enter the value\n");
scanf("%d", &a);
if((fp = fopen("info.txt", "r")) != NULL)
{
switch(a)
{
case 0:
exit(0);
case 1:
for(i=0;!feof(fp);i++)
{
fscanf(fp, "%s %s %s %s", sem.name, sem.surname, sem.gender, sem.education);
printf("%s, %s, %s, %s\n",sem.name,sem.surname,sem.gender,sem.education);
}
break;
case 2:
while (fgets(tmp, sizeof(tmp), fp) != NULL)
{
if (strstr(tmp, "bachelors"))
{
/* Code works fine until this part */
fprintf(fp, "\n%s %s %s %s", sem.name, sem.surname, sem.gender, sem.education);
}
}
break;
default: printf("Default statement");
}
fclose(fp);
}
}
}
如果有人能指出我做错了什么,我会非常感激,我添加了一个注释,其中代码运行到一个问题并且不显示任何内容。基本上我有txt文件。程序如果用户如此需要需要在文件中找到“单身汉”的行,并给我回复所有这些行。
答案 0 :(得分:2)
您正在阅读模式(fp = fopen("info.txt", "r"))
中打开文件并尝试使用fprintf()
写入文件,这是不可能的。
使用fp = fopen("info.txt", "r+")
,即读写模式。
答案 1 :(得分:0)
如果要比较字符串,则必须使用strcmp()
,而不是像“strstr”这样的未定义函数。此外,如果两个字符串具有相同的值,则strcmp返回0。因此,您还必须检查strcmp()
的返回值是否为零。
同样在我昨天回复你的问题时,fprintf()
方法会将你传递的字符作为参数追加到文件中。因此,在您的代码中,当您找到字符串“bachelor”时,您只需在文件末尾添加相同的行。如果要在控制台中查看这些数据,可以使用printf()
方法。