weixin_37734052 2017-03-09 11:00 采纳率: 0%
浏览 1295

《C程序设计语言》第四章计算器程序getop函数没有看懂,哪位好心人能帮我这个小白解决一下?

在书中的位置是66页,原代码如下:

 /* 获取下一个运算符或者数值操作值*/
int getop(char s[])
{
    int i,c;

    while((s[0]=c=getch())==' '||c=='\t') //跳过空格与换行符 
        ;
    s[1]='\0';                          //????? 
    if(!isdigit(c)&&c!='.')             //不是数,也就是说是运算符? 
        return c;
    i=0;
    if(isdigit(c))                      //收集整数部分 
        while(isdigit(s[++i]=c=getch()))
            ;
    if(c=='.')                          //收集小数部分 
        while(isdigit(s[++i]=c=getch()))
            ;
    s[i]='\0';
    if(c!=EOF)
        ungetch(c);
    return NUMBER;
 } 

我不太明白 s[1]='\0'; 这个语句有什么意义,在收集整数和小数的时候这个语句存入的数据又会被覆盖,所以为什么要加这个语句?
还有一个语句我不太清楚它的意思。

    if(!isdigit(c)&&c!='.')             
                    return c;

书中注释是“不是数”,那么也就是说它是运算符了?这个我是想确认一下。

如果哪位能解决我的问题,我真是感激不尽!

  • 写回答

3条回答 默认 最新

  • 赵一村 Yisen 2021-10-09 16:46
    关注

    因为这里定义的s是一个字符数组,而不是字符串常量。这两个东西有唯一的区别:字符串常量在系统中保存的时候以字符数组的形式保存,会自动添加'\0'。
    所以这个程序的变量s,如果在下一条if语句返回的话,必须在s结尾添加'\0'以此作为字符数组的结尾。
    简单来说,声明一个字符串常量,可以没有空字符。但是声明字符数组,结尾必须是空字符。

    评论

报告相同问题?

悬赏问题

  • ¥15 如何用stata画出文献中常见的安慰剂检验图
  • ¥15 c语言链表结构体数据插入
  • ¥40 使用MATLAB解答线性代数问题
  • ¥15 COCOS的问题COCOS的问题
  • ¥15 FPGA-SRIO初始化失败
  • ¥15 MapReduce实现倒排索引失败
  • ¥15 ZABBIX6.0L连接数据库报错,如何解决?(操作系统-centos)
  • ¥15 找一位技术过硬的游戏pj程序员
  • ¥15 matlab生成电测深三层曲线模型代码
  • ¥50 随机森林与房贷信用风险模型