【发布时间】:2019-09-04 19:03:45
【问题描述】:
我正在执行一项任务,以对位于文本文件内的列表中的名称进行排序。我正在使用 CodeBlocks v17.12。我要求代码读取文件上的名字(在这种情况下恰好是 Hamza),当它看到一个空格时它应该停止。但是,一旦我在 CodeBlocks 中编译它,它就会吐出:Hamza uyªn<■ ║kDu¡lDu``@
有人知道这是什么问题吗?我不能把它放在那里,因为我以后需要整理名字。
{
fPointerOne = fopen("DT265A.txt", "r");
fPointerTwo = fopen("DT265C.txt", "r");
fPointerThree = fopen("DT265B.txt", "r");
fPointerFour = fopen("DT8900.txt", "r");
fgets(firstNames, 11, fPointerOne);
for (i = 0; i < SIZE; i++) {
ClassGroup1.firstName[i] = firstNames[i];
if (firstNames[i] == ' ') {
goto PRINT;
}
}
PRINT:
printf("%s", ClassGroup1.firstName);
fclose(fPointerOne);
fclose(fPointerTwo);
fclose(fPointerThree);
fclose(fPointerFour);
return 0;
}
【问题讨论】:
-
我有理由确定您的代码没有向
ClassGroup1.firstName添加空终止符,这使得printf("%s", ClassGroup1.firstName);exhibit 未定义行为 -
我认为你需要使用 fflush(stdin) 即清除缓冲区
-
另外
goto是绝对没有必要的,只需使用break -
@UnholySheep 你是对的
-
假设您在
ClassGroup1.firstName中仍有可用空间(我无法确定,因为您没有提供minimal reproducible example),您可以在ClassGroup1.firstName[i + 1] = '\0'中添加if跨度>