鱼C论坛

 找回密码
 立即注册
查看: 680|回复: 4

[已解决]想输入什么就输出什么

[复制链接]
发表于 2023-10-21 10:18:06 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
纯新手
#include<stdio.h>
int main()
{
       
        char ch = getchar();
        while (getchar() != '\n')
                {
                putchar(ch);
                }
        return 0;
}
能成功运行但结果不对
输入几个字母会少一个,而且会全都变成第一个字母。
输入sad会输出ss
最佳答案
2023-10-21 10:18:30
你的代码中有一些问题,导致它不能按照你的预期工作。你的代码只读取了第一个字符,然后在循环中不断地输出这个字符,直到输入行结束。这就是为什么你看到的输出全都是第一个字母。

如果你想要输入什么就输出什么,你应该在循环中读取并立即输出字符。这样,你就可以处理输入行中的每一个字符,而不仅仅是第一个。以下是一个修改后的代码示例:

  1. #include<stdio.h>
  2. int main()
  3. {
  4.     char ch;
  5.     while ((ch = getchar()) != '\
  6. ')
  7.     {
  8.         putchar(ch);
  9.     }
  10.     return 0;
  11. }
复制代码


在这个修改后的代码中,getchar()函数在循环中被调用,每次读取一个字符,然后立即使用putchar()函数输出这个字符。这个循环会一直持续,直到读取到换行符('\
'),这通常表示输入行的结束。这样,你就可以输入任何字符,然后看到相同的字符被输出。
请注意,本回答来自GPT-4
如果问题已经解决,请设置最佳答案
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-10-21 10:18:28 | 显示全部楼层
问题出在你的代码中,你只在循环开始的时候读取了一个字符,然后在循环中每次都输出这个字符。这就导致了输出结果中只有一个字符,并且都是输入的第一个字符。

要解决这个问题,你需要在循环中每次都读取一个字符,并将其输出。可以修改你的代码如下:

  1. #include<stdio.h>
  2. int main()
  3. {
  4.     char ch;
  5.     while ((ch = getchar()) != '\n')
  6.     {
  7.         putchar(ch);
  8.     }
  9.     return 0;
  10. }
复制代码


这样,每次循环都会读取一个字符并输出,直到遇到换行符为止。这样你输入的所有字符都会被正确输出。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-10-21 10:18:30 | 显示全部楼层    本楼为最佳答案   
你的代码中有一些问题,导致它不能按照你的预期工作。你的代码只读取了第一个字符,然后在循环中不断地输出这个字符,直到输入行结束。这就是为什么你看到的输出全都是第一个字母。

如果你想要输入什么就输出什么,你应该在循环中读取并立即输出字符。这样,你就可以处理输入行中的每一个字符,而不仅仅是第一个。以下是一个修改后的代码示例:

  1. #include<stdio.h>
  2. int main()
  3. {
  4.     char ch;
  5.     while ((ch = getchar()) != '\
  6. ')
  7.     {
  8.         putchar(ch);
  9.     }
  10.     return 0;
  11. }
复制代码


在这个修改后的代码中,getchar()函数在循环中被调用,每次读取一个字符,然后立即使用putchar()函数输出这个字符。这个循环会一直持续,直到读取到换行符('\
'),这通常表示输入行的结束。这样,你就可以输入任何字符,然后看到相同的字符被输出。
请注意,本回答来自GPT-4
如果问题已经解决,请设置最佳答案
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-10-21 10:19:05 | 显示全部楼层
问题分析

上述代码实现的功能是:从输入读取一个字符,然后忽略剩余的输入直到遇到换行符 \n,然后把第一步读取的字符输出。

可以看出,在输入中去除第一个字符之外的部分时,代码只调用了一次 getchar() 函数。因此,当读取第一个字符后,后面输入的字符(包括第一次输入的那个字符)都被读取并丢弃了。而在输出时,由于只保存了第一个字符 ch 的值,因此输出的也只有一个字符。

解决方案

为了实现“想输入什么就输出什么”,我们需要逐个读取输入中的所有字符,并进行保存,直到遇到换行符才停止。可以借助循环来实现这个功能。

下面是修改后的代码:
  1. #include <iostream>
  2. #include <string>
  3. int main() {
  4.     std::string input;
  5.     char ch;
  6.     while ((ch = getchar()) != '\n') {
  7.         input += ch; // 将读取的字符添加到字符串末尾
  8.     }
  9.     std::cout << input << std::endl; // 输出整个字符串
  10.     return 0;
  11. }
复制代码

在上述代码中,我们定义了一个字符串变量 input 和一个字符变量 ch。在 while 循环中,每次读取一个字符,并将其添加到字符串 input 的末尾。循环会一直执行,直到读取到换行符,此时停止循环。最终,将整个字符串输出到控制台上。

编译并运行以上代码,在控制台输入任意字符序列,并按下回车键,程序将输出你输入的完整字符串。

希望能解决你的问题!如果还有任何疑问,请继续提问。

球一个最佳答案谢谢啦!这对我非常重要!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2023-10-21 11:37:08 | 显示全部楼层
Mike_python小 发表于 2023-10-21 10:19
问题分析

上述代码实现的功能是:从输入读取一个字符,然后忽略剩余的输入直到遇到换行符 \n,然后把第一 ...

非常感谢,你的解释很清晰,让我知道错误在哪里
但代码对我这个初学者来说有点复杂了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-20 05:27

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表