fprintf无法正常工作,需要打印特定行的txt文件

时间:2013-12-12 06:43:57

标签: c

#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文件。程序如果用户如此需要需要在文件中找到“单身汉”的行,并给我回复所有这些行。

2 个答案:

答案 0 :(得分:2)

您正在阅读模式(fp = fopen("info.txt", "r"))中打开文件并尝试使用fprintf()写入文件,这是不可能的。

使用fp = fopen("info.txt", "r+"),即读写模式。

答案 1 :(得分:0)

如果要比较字符串,则必须使用strcmp(),而不是像“strstr”这样的未定义函数。此外,如果两个字符串具有相同的值,则strcmp返回0。因此,您还必须检查strcmp()的返回值是否为零。

同样在我昨天回复你的问题时,fprintf()方法会将你传递的字符作为参数追加到文件中。因此,在您的代码中,当您找到字符串“bachelor”时,您只需在文件末尾添加相同的行。如果要在控制台中查看这些数据,可以使用printf()方法。