如何在C语言中将数组字符复制到用户创建的文件中
在C语言中实现将输入内容写入用户创建的文件(附原代码问题修复)
嘿,我来帮你搞定这个C语言的小问题——把输入的内容存入自己创建的文件,顺便帮你把原代码里的逻辑bug给修正过来。
原代码的逻辑问题
原代码里的核心bug出在输入内容的处理部分:
while((ch=getchar()) != '*') { for(i=0;i<140;i++) text[i] = ch; }
每次读取一个字符后,你用for循环把整个text数组的所有元素都赋值成当前读取的字符,这就导致之前输入的内容完全被覆盖,最后写入文件的只会是你输入的最后一个字符重复140次,完全不符合我们想要保存所有输入内容的需求。
正确的实现代码
我们需要修改逻辑,把每次读取的字符依次存入text数组,而不是覆盖整个数组。另外还要注意处理scanf后的换行符,避免第一个输入字符被跳过:
#include <stdio.h> #include <stdlib.h> int main() { FILE *fp; char file_name[50], ch, text[140]; int i = 0; // 初始化数组索引,用来跟踪存入的位置 printf("请输入要创建的文件名:"); scanf("%s", file_name); // 处理scanf后留在输入缓冲区的换行符,避免getchar直接读取到换行 getchar(); fp = fopen(file_name, "w"); if(fp == NULL) { printf("无法打开文件 %s!", file_name); exit(EXIT_FAILURE); } printf("请向文件 %s 中输入内容(输入*结束):\n", file_name); // 依次读取字符存入数组,直到遇到*或者数组满了(留一个位置给结束符) while((ch = getchar()) != '*' && i < 139) { text[i++] = ch; } text[i] = '\0'; // 添加字符串结束符,确保是合法的C字符串 // 将数组内容写入文件,用fputs更简洁 fputs(text, fp); fclose(fp); printf("内容已成功写入文件 %s!\n", file_name); return 0; }
代码关键说明
- 处理输入缓冲区的换行:
scanf读取文件名后,输入缓冲区会留下一个换行符,用getchar()把它吃掉,不然第一次读取内容的getchar()会直接读到这个换行,导致输入的第一个字符被跳过。 - 依次存入字符:用
i作为数组的索引,每次读取一个字符就存在text[i],然后i自增,这样输入的内容会按顺序存入数组,不会被覆盖。 - 避免数组越界:限制
i < 139是为了给字符串结束符'\0'留位置,确保数组不会溢出。 - 字符串结束符:添加
'\0'让text成为合法的C字符串,这样用fputs或者fprintf就能一次性写入所有内容,不用循环逐个字符写。
内容的提问来源于stack exchange,提问作者İlker Kılınçarslan
相关产品推荐
相关产品推荐

