C中写入的文本文件为空,不显示任何字符
这个程序应该从读取任何键盘输入开始,然后每次向一个名为test.ext的磁盘文件写入一个字符 要终止代码,您应该能够输入EOF序列(我相信Windows的Crt^z) 输入键盘 输出-test.txt(磁盘文件)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); } 您使用的是: 将字符写入标准输出(标准输
#包括
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;
}