C:从文件读取有问题

标签 c string file

所以我有一个程序,它接受用户输入并将其与文件中的一行进行比较,然后再进入下一行,如果用户正确理解了单词,他们将获得 2 分,如果错误,他们将获得 1 分。作为故障保护,我在程序中添加了一个小功能,可以删除单词中的所有空格。

程序按预期工作,空格被删除,运行时所有单词都会被有效扫描和比较。

但是,一旦到达文件的最后一行,单词的正确拼写将给出错误的输出,这可能与循环有关,但我不确定。

简而言之:我所需要的只是你们中有一位才华横溢的程序员来看看我的代码,看看是什么导致了这种情况的发生。

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

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 循环没有将其转换为下一个变量有关,但是看到 <= 符号使这个程序变得更糟,我真的只需要对程序进行简单的修复,谢谢。

附注对于任何要评论我的空间函数编码的人,是的,我可以做得更好,但现在这不是问题。所以请不要写任何与此相关的内容。

最佳答案

我猜你的文件不是由换行符终止的。因此,最后一个单词 Pig 被这行代码截断:

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

(无条件)。

在文件末尾添加换行符,或者在截断之前检查字符串结尾:

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

(也可以使用 strtok 从字符串中删除所有空格,而无需编写棘手的代码)

关于C:从文件读取有问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22027039/

相关文章:

c - 段错误 strcpy

Android 从月份名称创建 ArrayList

php - PHP 中的数学错误 - 数字被截断?

asp.net - 根据需要在服务器中生成并提供文件。在不消耗太多资源的情况下最好的方法是什么?

c - C 中的 LZW 解压

c - 在一行中输出 C 语言中的 system()

c - 迭代存储在堆上的数组

c - 给定一个使用 malloc 创建的字符串,如何向其中添加一个整数?

php - PHP 中有没有一种方法可以使文件保持打开状态并处理每一行和后续行?

java - 使用 Java 读取远程文件