如何从TXT文件中输出包含空格的完整语句?
解决读取文件时空格被识别为分隔符的问题
问题根源
你当前用的fscanf("%s", line)里,%s格式说明符默认会把空白字符(空格、换行、制表符)当作读取结束的标记,所以每行里的空格会被当成内容分割点,导致"hello world"这类带空格的内容被拆成两行输出。另外代码还有两个小问题:
- Windows路径中的反斜杠没转义——C语言字符串里的
\是转义字符,必须写成\\,否则编译器会把\U、\E等当成特殊转义序列,导致路径无效; - 末尾的
fclose(fwrite)无效,你没定义fwrite这个文件指针,会引发编译错误。
解决方案一:用fgets读取整行(推荐)
fgets可以直接读取一整行内容(包括空格和换行符),直到碰到换行符或缓冲区填满,是读取整行文本的标准方法。修改后的代码如下:
#include <stdio.h> int main(void) { // 路径反斜杠转义为双反斜杠 FILE* fread = fopen("C:\\Users\\EXAMPLE\\desktop\\input.txt", "r"); if (fread == NULL) { printf("无法打开文件!\n"); return -1; } char line[1000] = ""; // fgets会保留换行符,因此printf不用额外加\n while (fgets(line, sizeof(line), fread) != NULL) { printf("%s", line); } fclose(fread); // 删除无效的fclose(fwrite) return 0; }
解决方案二:修改fscanf的格式说明符
如果一定要用fscanf,可以通过%[^\n]指定读取到换行符为止,同时要手动处理缓冲区里的换行符:
#include <stdio.h> int main(void) { FILE* fread = fopen("C:\\Users\\EXAMPLE\\desktop\\input.txt", "r"); if (fread == NULL) { printf("无法打开文件!\n"); return -1; } char line[1000] = ""; // %[^\n] 读取所有非换行符的字符,实现整行读取 while (fscanf(fread, "%[^\n]", line) == 1) { printf("%s\n", line); // 读取并丢弃缓冲区中的换行符,避免影响下一次读取 fgetc(fread); } fclose(fread); return 0; }
内容的提问来源于stack exchange,提问作者JohnDoe12
相关产品推荐
相关产品推荐

