gpt4 book ai didi

C:从文件读取有问题

转载 作者:行者123 更新时间:2023-11-30 20:40:31 25 4
gpt4 key购买 nike

所以我有一个程序,它接受用户输入并将其与文件中的一行进行比较,然后再进入下一行,如果用户正确理解了单词,他们将获得 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com