从文件中搜索和打印字符串时,每行打印而不是我需要的行

时间:2016-04-18 19:27:42

标签: c macos scanf strcmp

我正在尝试创建一个允许我在文本文件中搜索名称的程序。此时程序将成功告诉我该名称是否在名单上,但它也会打印所有其他行!例如,如果我想看看“Sarah”是否会在名单上,它会说

Sarah is not on the roster
Sarah is number 7 on the roster
Sarah is not on the roster

我只是想告诉我“莎拉”是否在名单上。我自学C非常非常新,所以我假设我做了一些愚蠢的事。

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

int main(void)
{
    FILE *inFile;
    inFile = fopen("workroster.txt", "r");
    char rank[4], gname[20], bname[20];
    char name[20];

    printf("Enter a name: __");
    scanf("%s", name);
    while(fscanf(inFile, "%s %s %s", rank, bname, gname)!= EOF)          
    {
        if(strcmp(gname,name) == 0)
            printf("%s is number %s on the roster\n", name, rank);
        else
            printf("%s is not on the roster\n", name);
    }
    fclose(inFile);

    return 0;
}

2 个答案:

答案 0 :(得分:1)

您需要跟踪name是否找到,并且只打印&#34;而不是在名单上#34; 消息你没有找到名字就完成了while循环。

int found = 0;
while(fscanf(inFile, "%s %s %s", rank, bname, gname)== 3)          
{
    if(strcmp(gname,name) == 0)
    {
        printf("%s is number %s on the roster\n", name, rank);
        found = 1;
    }
}

if ( !found )
    printf("%s is not on the roster\n", name);

答案 1 :(得分:1)

您可以选择type=search并检查名称是否存在。