C文件写入问题

时间:2017-11-26 18:40:32

标签: c file io

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

#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&amp; amp; deitel book,你知道这里有什么问题吗? 另外,我想知道我怎样才能用scanf而不是单个单词来表达整个短语..如果我做scanf(&#34;%[^ \ n]&#34;,string) 程序变得困惑,一旦我写了一些东西,它就会循环写出同样的东西一遍又一遍,文件将变得像1,7Gb大..帮助!

1 个答案:

答案 0 :(得分:0)

当用户按ctrl+z时,您的流程(a.out)将在内部收到signal20,您的流程将为stopped,但数据将not 1}}因为程序被终止abnormally而被保存。

您可以在man 7 signal上输入terminal并查看default actio的{​​{1}} n。那么现在你需要修改ctrl+z默认操作吗?怎么样 ?使用ctrl+zsignal()

每当按下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()的手册页。