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 PointNet++的onnx模型只能使用一次
  • ¥20 西南科技大学数字信号处理
  • ¥15 有两个非常“自以为是”烦人的问题急期待大家解决!
  • ¥30 STM32 INMP441无法读取数据
  • ¥15 R语言绘制密度图,一个密度曲线内fill不同颜色如何实现
  • ¥100 求汇川机器人IRCB300控制器和示教器同版本升级固件文件升级包
  • ¥15 用visualstudio2022创建vue项目后无法启动
  • ¥15 x趋于0时tanx-sinx极限可以拆开算吗
  • ¥500 把面具戴到人脸上,请大家贡献智慧,别用大模型回答,大模型的答案没啥用
  • ¥15 任意一个散点图自己下载其js脚本文件并做成独立的案例页面,不要作在线的,要离线状态。