You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 06:22:16