LYZLYZLYZ_ 2023-01-16 17:24 采纳率: 100%
浏览 27
已结题

关于#c语言#的问题:为什么输入#还是没有结束输入

题目内容:
从键盘读取用户输入直到遇到#字符,编写程序统计读取的空格数目、读取的换行符数目以及读取的所有其他字符数目。(要求用getchar()输入字符)

#include <stdio.h>
int main()
{
   char ch;
   int cnt=0,cnt1=0,cnt2=0;
   while((scanf("%c",&ch))!='#')
   {
       if(ch==' ')
       cnt++;
       else if(ch=='\n')
       cnt1++;
       else
       cnt2++;
   }
   printf("%d %d %d",cnt,cnt1,cnt2);
   return 0;
}

为什么输入#还是没有结束输入?

  • 写回答

1条回答 默认 最新

  • a5156520 2023-01-16 17:29
    关注

    因为scanf()函数的返回值是成功从输入读取的数据项数,在这个例子,如果成功读取一个字符则返回1,否则返回0,所以用这个返回值!='#' 会一直不成立,因为'#'对应的ASCII 码值是35, 比较的实际是它的ASCII码值,1或0肯定是都不会等于35的;

    如果需要使用getchar()(注释贴出了使用scanf()函数的修改办法),可修改如下:

    参考链接:


    #include <stdio.h>
    int main()
    {
       char ch;
       int cnt=0,cnt1=0,cnt2=0;
       // http://ascii.wjccx.com/
       // https://baike.baidu.com/item/scanf/10773316?fr=aladdin
       
     // while((scanf("%c",&ch))==1&&ch!='#')  // 如果使用scanf()可这样修改 
       while((ch=getchar())!='#')  //使用getchar() 
       {
           if(ch==' ')
           cnt++;
           else if(ch=='\n')
           cnt1++;
           else
           cnt2++;
       }
       printf("%d %d %d",cnt,cnt1,cnt2);
       return 0;
    }
    

    img

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 1月16日
  • 已采纳回答 1月16日
  • 创建了问题 1月16日

悬赏问题

  • ¥15 对于squad数据集的基于bert模型的微调
  • ¥15 为什么我运行这个网络会出现以下报错?CRNN神经网络
  • ¥20 steam下载游戏占用内存
  • ¥15 CST保存项目时失败
  • ¥15 树莓派5怎么用camera module 3啊
  • ¥20 java在应用程序里获取不到扬声器设备
  • ¥15 echarts动画效果的问题,请帮我添加一个动画。不要机器人回答。
  • ¥15 Attention is all you need 的代码运行
  • ¥15 一个服务器已经有一个系统了如果用usb再装一个系统,原来的系统会被覆盖掉吗
  • ¥15 使用esm_msa1_t12_100M_UR50S蛋白质语言模型进行零样本预测时,终端显示出了sequence handled的进度条,但是并不出结果就自动终止回到命令提示行了是怎么回事: