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
相关产品推荐
相关产品推荐

