C:文件循环不正确

时间:2014-02-25 21:16:42

标签: c string file

所以我有一个程序可以接受用户输入并将其与文件中的特定行进行比较,但是最后一行总是被认为是错误的,所以有人能为我解决这个问题吗?谢谢。

文件内容(只是一个随机单词列表)

Baby
Milk
Car
Face
Library
Disc
Lollipop
Suck
Food
Pig

(库是stdio,conio和string)

char text[100], blank[100];
int c = 0, d = 0;

void space(void);

int main()
{
    int loop = 0;
    char str[512];
    char string[512];
    int line = 1;
    int dis = 1;
    int score = 0;
    char text[64];

    FILE *fd;

    fd = fopen("Student Usernames.txt", "r");   // Should be test

    if (fd == NULL)
    {
        printf("Failed to open file\n");
        exit(1);
    }

    do
    {
        printf("Enter the string: ");
        gets(text);

        while (text[c] != '\0')
        {
            if (!(text[c] == ' ' && text[c] == ' '))
            {
                string[d] = text[c];
                d++;
            }
            c++;
        }

 string[d] = '\0';
 printf("Text after removing blanks\n%s\n", string);

 getch();

for(loop = 0;loop<line;++loop)
{
    fgets(str, sizeof(str), fd);
}
printf("\nLine %d: %s\n", dis, str);
dis=dis+1;
str[strlen(str)-1] = '\0';
if(strcmp(string,str) == 0 )
 {
 printf("Match\n");
 score=score+2;
 }
     else
     {
     printf("Nope\n");
     score=score+1;
     }
 getch();
 c=0;
 d=0;
}
while(!feof(fd));
printf("Score: %d",score);
getch();
}

对于最后一行的任何输入,输出总是不正确的,我相信这与for循环没有把它变成下一个变量有关,但是看到&lt; =表示法会使这个程序变得更糟,我真的只需要一个简单的程序修复程序,谢谢。

2 个答案:

答案 0 :(得分:0)

我认为这是因为当你从文件输入行完成后,你不会从'string'中清除换行符。 EG,你这样做:

str[strlen(str)-1] = '\0';

但不是这样:

string[strlen(string)-1] = '\0';

(作为旁注,你应该避免在C代码中使用'string'这个词,以防你以后想要将它移植到C ++中)

答案 1 :(得分:-1)

我认为你应该纠正这个陈述:

(!(text[c] == ' ' && text[c] == ' ')) to this:
 (!((text[c] == ' ') && (text[c] == ' ')))

编译器可以编译两者,但在你的情况下不能正常工作