gpt4 book ai didi

c - C文件写入问题

转载 作者:行者123 更新时间:2023-11-30 19:32:04 25 4
gpt4 key购买 nike

我在写入文件时遇到问题,这是代码:

#include <stdio.h>

int main(int argc,char* argv[])
{
if(argc!=2)
{
printf("\x1B[31mError::%s takes exactly one argument!\n\x1B[0m",argv[0]);
return 1;
}

char string[100];

FILE* file=fopen(argv[1],"w");
if(file==NULL)
{
printf("\x1B[31mFile is invalid!\x1B[0m\n");
return 1;
}

while(!feof(stdin))
{
scanf("%s",string);
fprintf(file,"%s\n",string);
}
fclose(file);
return 0;
}

它应该使用scanf进行输入并写入文件,直到我输入文件结尾字符(ctrl+Z),当它完成运行时,我打开的文件是空的。 deitel & deitel 书中也建议了这种代码结构,你知道这里出了什么问题吗?另外,我想知道如何用 scanf 获取整个短语而不是每次使用单个单词..如果我这样做 scanf("%[^\n]",string)程序变得困惑,一旦我写了一些东西,它就会进入一个循环,一遍又一遍地写同样的东西,文件将变得像 1,7Gb 大..救命!

最佳答案

当用户按下ctrl+z时您的进程( a.out )将收到 signal20在内部,您的流程将是 stopped但数据会not由于程序终止而被保存 abnormally .

您可以输入man 7 signalterminal并检查 default actio数量 ctrl+z 。所以现在需要修改ctrl+z默认操作 ?如何 ?使用signal()sigaction() .

每当ctrl+z按下,跳转至isr()那里save使用 exit() 当前进程状态系统调用。 ctrl+z信号号是 20 .

我对您的代码做了一些小修改。

#include <unistd.h>
#include <stdio.h>
#include <signal.h>
void isr(int n)
{
if(n == 20)//if ctrl+z is pressed then condition will be true
{
printf("in isr :\n");
exit(0);//exit(0) is normal termination of process i.e it will save current process context
}
}
int main(int argc,char* argv[])
{
if(argc!=2)
{
printf("\x1B[31mError::%s takes exactly one argument!\n\x1B[0m",argv[0]);
return 1;
}

char string[100];

FILE* file=fopen(argv[1],"w");
if(file==NULL)
{
printf("\x1B[31mFile is invalid!\x1B[0m\n");
return 1;
}

while(!feof(stdin))
{
signal(20,isr);//when user presses ctrl+z it will jump to isr()
scanf("%s",string);
fprintf(file,"%s\n",string);

}

fclose(file);
return 0;
}

浏览一下 signal() 的手册页和exit() .

关于c - C文件写入问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47499668/

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