gpt4 book ai didi

c - 将用户输入写入文件,然后读取它

转载 作者:太空宇宙 更新时间:2023-11-04 04:17:00 25 4
gpt4 key购买 nike

我必须以这种方式接收用户输入:

U word word2 word3
U word word2 word3
R word
R word
X

我想将它写入一个文件然后读取写入的内容但是程序处于无限循环中,并且正在创建文件但它是空的,在我看来程序永远不会离开写入的while循环出于某种原因的文件。

void write_to_file(FILE *fp){
char buffer[37];
while(fgets(buffer, 37, stdin)){
fprintf(fp, "%s", buffer);
}
fclose(fp);
}

void read_from_file(FILE *fp){
char buffer[37];
char tipo;
char input_a[6];
char input_b[26];
while(fgets(buffer, 37, fp)) {
sscanf(buffer, "%c %s %[^\n]", &tipo, input_a, input_b);
switch(tipo) {
case 'U' :
// do stuff
break;
case 'R' :
// do stuff
break;
case 'X' :
exit(0);
break;
default :
printf("Invalid Operation\n");
}
}
}

int main(){
FILE *fp = fopen("input.txt","a+");
write_to_file(fp);
read_from_file(fp);
return 0;
}

我用 a+ 打开文件,因为如果文件已经存在,我想在最后一行之后写

提前致谢。

最佳答案

程序处于死循环中? 这是因为下面的 while() 循环

while(fgets(buffer, 37, stdin)) {
}

正如 man 3 fgets 所说

fgets() return s on success, and NULL on error or when end of file occurs while no characters have been read.

您可以通过点击 ctrl+d 结束此循环,但如果您按下 ctrl+d,您的主进程 a.out 将终止。解决此问题的一种方法是最后给一个额外的\nENTER 作为输入,然后显示fgets() 的返回值。

这里是示例代码

void write_to_file(FILE *fp){
char buffer[37], *ptr = NULL;
while((ptr = fgets(buffer, 37, stdin))!=NULL) { /* It return NULL upon reaching EOF */
if(*ptr != '\n') { /* at last user enters \n, compare here, if true , break the loop */
fprintf(fp, "%s", buffer);
}
else
break;
}
fclose(fp);
}

关于c - 将用户输入写入文件,然后读取它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50656533/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com