C语言无限循环问题:文件字符匹配代码陷入死循环求助
你的C语言代码无限循环及其他问题的修复方案
核心问题:导致无限循环的原因
你打开了目标文件fwif.txt,但读取字符时用的是getchar()——这个函数是从**标准输入(stdin)**读取字符,而非你打开的文件流。只要不手动输入EOF(Unix下按Ctrl+D,Windows下按Ctrl+Z),循环就永远不会终止。必须改用fgetc(file_content)从打开的文件中读取字符。
其他需要修复的问题
- 未初始化变量:
line_number没有初始值,初始状态是随机垃圾值,会导致行号计数完全错误,应初始化为1(文件第一行从1开始计数)。 - 错误的错误提示:
fopen失败时提示"Memory allocation failed"完全不对,应该改成"Failed to open file"这类准确描述。 - 错误的资源释放:
free(file_content)是错误操作,FILE*是文件流指针,不是malloc分配的内存,必须用fclose(file_content)关闭文件。 - 字符串数组越界风险:
char actual_word[10] = "sylvestric";中,"sylvestric"是10个字符,但C字符串需要末尾的\0终止符,数组大小至少要11。更稳妥的写法是char actual_word[] = "sylvestric";,让编译器自动计算大小。 - 换行判断逻辑冗余:你现在先执行
putchar(character)再判断是否是换行,完全没必要绕弯子,直接判断字符本身即可。另外换行后建议重置匹配计数器,避免跨行匹配单词的不合理情况。 - 字符存储类型错误:
char character应改成int character,因为fgetc返回的是int类型(可能是字符ASCII值或EOF,EOF是超出char范围的负数),用char存储会导致EOF判断失效。
修复后的完整代码
#include <stdio.h> int main() { FILE *file_content = fopen("fwif.txt", "r"); if (file_content == NULL) { printf("Failed to open file\n"); return 1; } char actual_word[] = "sylvestric"; int word_counter = 0; int character; int line_number = 1; int word_size = 10; printf("Reading file for word....\n"); while((character = fgetc(file_content)) != EOF) { putchar(character); if (character == '\n') { line_number++; word_counter = 0; } else { if (actual_word[word_counter] == character) { word_counter++; } else { word_counter = 0; } } if (word_counter == word_size) { printf("\nWord found on line: %d\n", line_number); fclose(file_content); return 0; } } printf("Word not found in file\n"); fclose(file_content); return 0; }
内容的提问来源于stack exchange,提问作者Somto
相关产品推荐
相关产品推荐

