Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C中写入的文本文件为空,不显示任何字符_C_Codeblocks - Fatal编程技术网

C中写入的文本文件为空,不显示任何字符

C中写入的文本文件为空,不显示任何字符,c,codeblocks,C,Codeblocks,这个程序应该从读取任何键盘输入开始,然后每次向一个名为test.ext的磁盘文件写入一个字符 要终止代码,您应该能够输入EOF序列(我相信Windows的Crt^z) 输入键盘 输出-test.txt(磁盘文件) #包括 void main(){ 文件*ptr; char ch; ptr=fopen(“test.txt”,“w”); 做{ ch=getchar(); putchar(ch); }while(ch!=EOF); fclose(ptr); } 您使用的是: 将字符写入标准输出(标准输

这个程序应该从读取任何键盘输入开始,然后每次向一个名为test.ext的磁盘文件写入一个字符

要终止代码,您应该能够输入EOF序列(我相信Windows的Crt^z)

输入键盘 输出-test.txt(磁盘文件)

#包括
void main(){
文件*ptr;
char ch;
ptr=fopen(“test.txt”,“w”);
做{
ch=getchar();
putchar(ch);
}while(ch!=EOF);
fclose(ptr);
}
您使用的是:

将字符写入标准输出(标准输出)

当您确实想写入
ptr
文件时。您可以通过以下方式写入文件:

fprintf(ptr, "%c", ch);
或者更好的是,您可以使用将单个字符写入文件:

fputc(ch, ptr);

您需要一个类似于
fputc()
的函数,它为输出流提供了一个额外的参数,您可以选择输出应该指向的位置,而不是只写入
stdout
putchar()

int main(void)
{
    FILE *ptr;
    char ch;

    ptr = fopen("test.txt", "w");
    if (!ptr)
    {
        perror("test.txt");
        return 1;
    }

    do {
        ch = getchar();
        fputc(ch, ptr); //note this line
    } while (ch != EOF);


    fclose(ptr);
    return 0;
}

putchar(ch)
写入stdout,因此文件保持为空。
ptr
未被使用-这应该给您一个提示。。它必须是
int ch
,否则
ch!=EOF
可能不起作用。此外,当您获得EOF时,您需要在将字符写入文件之前中断循环。使用
while((ch=getchar())!=EOF){…}
非常感谢,这很有帮助。我确实用“fputc(ch,ptr)”替换了“putchar(ch)”,并在文件中显示了我的文本,但奇怪的是,这个字符一直出现在每个文件“ÿ”的末尾。有什么特别的原因吗?
int main(void)
{
    FILE *ptr;
    char ch;

    ptr = fopen("test.txt", "w");
    if (!ptr)
    {
        perror("test.txt");
        return 1;
    }

    do {
        ch = getchar();
        fputc(ch, ptr); //note this line
    } while (ch != EOF);


    fclose(ptr);
    return 0;
}