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 目前主流的音乐软件,像网易云音乐,QQ音乐他们的前端和后台部分是用的什么技术实现的?求解!
  • ¥60 pb数据库修改与连接
  • ¥15 spss统计中二分类变量和有序变量的相关性分析可以用kendall相关分析吗?
  • ¥15 拟通过pc下指令到安卓系统,如果追求响应速度,尽可能无延迟,是不是用安卓模拟器会优于实体的安卓手机?如果是,可以快多少毫秒?
  • ¥20 神经网络Sequential name=sequential, built=False
  • ¥16 Qphython 用xlrd读取excel报错
  • ¥15 单片机学习顺序问题!!
  • ¥15 ikuai客户端多拨vpn,重启总是有个别重拨不上
  • ¥20 关于#anlogic#sdram#的问题,如何解决?(关键词-performance)
  • ¥15 相敏解调 matlab