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

C语言功能选择程序可创建txt文件但无法写入内容问题求助

问题根因

你使用scanf("%i", &selection)读取选项数字时,用户输入数字后按下的**换行符\n**会残留在标准输入缓冲区中。后续调用fgets读取用户输入内容时,会直接读取到这个残留的换行符,相当于读取了一个空内容写入文件,因此出现文件创建成功但没有内容的问题。
你单独运行记事本代码功能正常,是因为单独运行时没有前置的scanf操作,不会有残留换行符干扰fgets的读取。

修复方案

在scanf读取选项完成后,添加代码清空输入缓冲区的残留字符即可,参考清空代码:

// 清空输入缓冲区残留的换行和多余字符
while (getchar() != '\n');

修改后的完整代码

#include <stdio.h>
#include <stdlib.h>
#include <windows.h>

#define DATA_SIZE 1000

int main()
{
    char data[DATA_SIZE];
    int selection = 0;
    printf("\t\t\t\t\HELLO, WELCOME TO THE ACTION CENTER\n");
    printf("Select what you want by typing the number according to the list below\n");
    printf("\t1. Type something on notepad\n");
    printf("\t2. Open browser\n");
    printf("\t3. Open Zoom\n");
    scanf("%i", &selection);
    // 新增:清空输入缓冲区残留内容
    while (getchar() != '\n');

    if (selection == 1)
    {
        printf("Opening Notepad...\n");
        FILE * fPtr;
        fPtr = fopen("txtfiles/text1.txt", "w"); // 需确保代码同级目录下存在txtfiles文件夹
        if (fPtr == NULL)
        {
            printf("Unable to create your txt file\n");
            exit(EXIT_FAILURE);
        }

        printf("NOTEPAD - TYPE WHAT YOU WANT:\n");
        fgets(data, DATA_SIZE,stdin);
        fputs (data, fPtr);
        fclose(fPtr);
        printf("File created successfully.\n");
    }

    if (selection == 2)
    {
        ShellExecute(NULL, "open", "C:\\Program Files (x86)\\Microsoft\\Edge\\Application\\msedge.exe" , NULL, NULL, SW_SHOWDEFAULT);
    }

    return 0;
}

内容的提问来源于stack exchange,提问作者cestkazz

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 16:39:05