gpt4 book ai didi

c - 为什么输入 "abc!!!"但输出不是 "abc+++"?

转载 作者:行者123 更新时间:2023-11-30 20:22:46 28 4
gpt4 key购买 nike

我正在研究输入/输出文件。下面的代码涉及一些函数,例如:fgetc()、fgets()、fputs()。我不知道为什么它不能完全按照我想要的方式工作。非常感谢!下面是我的代码:

#include <stdio.h>
int main()
{
FILE *fp; //FILE type pointer
int c; //using to get each character from file
char buffer [256]; //array as buffer to archive string

fp = fopen("file.txt", "r"); /*open a file with only read mode*/
if( fp == NULL )
{
perror("Error in opening file");
return(-1);
}
while(!feof(fp)) /*check if has not yet reached to end of file*/
{
c = getc (fp); //get a character from fp
if( c == '!' )
{
ungetc ('+', fp); //replace '!' by '+'

}
else
{
ungetc(c, fp); //no change
}
fgets(buffer,255,fp);//push string of fp to buffer
fputs(buffer, stdout); //outputting string from buffer to stdout
}
return(0);
}
<小时/>

最佳答案

while 循环中的逻辑有缺陷。

这就是发生的事情:

getc第一个字符a

a 不是 !,因此您 ungetc a 返回到流。

然后你读了一整行。当然你会得到abc!!!

然后打印该行。输出:abc!!!.

如果你想操作字符串,最好操作缓冲区而不是尝试修改流:

   int i;
int len = fgets(buffer,255,fp);//push string of fp to buffer
for (i=0; i < len; i++) {
if (buffer[i] == '!') {
buffer[i] = '+';
}
}
fputs(buffer, stdout); //outputting string from buffer to stdout

作为替代方案,如果您确实想使用 ungetc,则需要一次读取/打印一个字符,因为 ungetc 只能在一个字符上安全地完成。保留 ifungetc 并将 fgets/fputs 替换为以下内容:

   fgets(buffer,1,fp);       // Read one character. 
printf("%c", buffer[0]); // output one character from buffer to stdout

关于c - 为什么输入 "abc!!!"但输出不是 "abc+++"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38562159/

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