鱼C论坛

 找回密码
 立即注册
查看: 2015|回复: 14

[已解决]C程序设计语言 练习7-5 没有理解,请前辈指点

[复制链接]
发表于 2019-3-31 20:37:29 | 显示全部楼层 |阅读模式
50鱼币
本帖最后由 wow7jiao 于 2019-3-31 20:46 编辑

改写第4章中的后缀计算器程序,用scanf函数和(或)sscanf函数实现输入及数的转换.

#include <stdio.h>
#include <stype.h>

#define NUMBER '8'

int getop(char s[])
{
        int c, i, rc;
        static char lastc[] = " ";---------------------> 这个字符串里面就一个空格
       
        sscanf(lastc, "%c", &c);--------------------->sscanf读一个空字符,c里面应该没有东西啊
        lastc[0] = ' ';----------------------------------->这里有lastc[0] = 空格,这三条语句无意义啊
        while ((s[0] = c) == ' ' || c == '\t' )
                if (scanf("%c", &c) == EOF)
                        c = EOF;
        s[1] = '\0';
        if (!isdigit(c) && c != '.')
                return c;
        i = 0;
        if (isdigit(c))
                do {
                        rc = scanf("%x", &c);
                        if (!isdigit(s[i++] = c))
                                break;
                } while (rc != EOF);
        if (c == '.')
                do {
                        rc = scanf("%c", &c);
                        if (!isdigit(s[++i] c))
                                break;
                } while (rc != EOF);
        s[i] = '\0';
        if (rc != EOF)
                lastc[0] = c;
        return NUMBER;
}
最佳答案
2019-3-31 20:37:30
wow7jiao 发表于 2019-3-31 22:20
意味是静态的,可以反复存储。

1.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-3-31 20:37:30 | 显示全部楼层    本楼为最佳答案   
wow7jiao 发表于 2019-3-31 22:20
意味是静态的,可以反复存储。

1.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-3-31 22:09:58 | 显示全部楼层
你要看清楚,lastc数组是static的
static意味着什么?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2019-3-31 22:20:37 | 显示全部楼层
人造人 发表于 2019-3-31 22:09
你要看清楚,lastc数组是static的
static意味着什么?

意味是静态的,可以反复存储。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2019-4-10 10:16:55 | 显示全部楼层
本帖最后由 wow7jiao 于 2019-4-10 10:18 编辑

老师,lastc[]这个没有使用啊。,sscanf是从lastc读字符串然后把符合条件的字符放进c里,空格又不是字符
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-4-10 12:18:38 | 显示全部楼层
wow7jiao 发表于 2019-4-10 10:16
老师,lastc[]这个没有使用啊。,sscanf是从lastc读字符串然后把符合条件的字符放进c里,空格又不是字符
空格不是字符

空格是字符,并且空格的ascii值是0x20
https://fishc.com.cn/thread-67427-1-1.html
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2019-4-10 22:35:00 | 显示全部楼层
人造人 发表于 2019-4-10 12:18
空格是字符,并且空格的ascii值是0x20
https://fishc.com.cn/thread-67427-1-1.html

请问老师 ,sscanf(lastc, “%c”, &c)后,lastc[0]的内容 是什么 ?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-4-10 22:41:08 | 显示全部楼层
wow7jiao 发表于 2019-4-10 22:35
请问老师 ,sscanf(lastc, “%c”, &c)后,lastc[0]的内容 是什么 ?

https://baike.so.com/doc/6754426-6969009.html
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2019-4-10 22:44:01 | 显示全部楼层
人造人 发表于 2019-4-10 22:41
https://baike.so.com/doc/6754426-6969009.html

里面没有说源字符串会发生什么变化
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-4-11 12:17:50 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2019-4-11 13:23:12 | 显示全部楼层
人造人 发表于 2019-4-11 12:17
http://www.runoob.com/cprogramming/c-function-scanf.html
http://www.runoob.com/cprogramming/c-funct ...

lastc 是const char *str,按原理是没有修改的.

后面的lastc[0] = ' '没有意义啊(复习题里面的说明是clear last character)

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-4-11 21:49:35 | 显示全部楼层
wow7jiao 发表于 2019-4-11 13:23
lastc 是const char *str,按原理是没有修改的.

后面的lastc[0] = ' '没有意义啊(复习题里面的说明是 ...

1.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2019-4-11 22:04:44 | 显示全部楼层
本帖最后由 wow7jiao 于 2019-4-11 22:12 编辑


第一句 和 第二句我已经明白了 ,空格 也是一个字符 ,sscanf()把空格放进c里

但是第三句是个错的啊 lastc[0] = ' '

在声明变量时用 const 修饰这个变量的类型,如 const int a,这表示这个变量的值在初始化后就不可再更改。static 影响的是一个对象或变量的“生存期”,这和能否修改变量的值没有关系。函数中的局部变量在被 static 修饰后,该变量只会被初始化一次,然后会在整个程序执行期间都有效,也就是扩展了变量的生存期。

sscanf()的第一个 参数 是一个用const修饰的 字符指针
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-4-12 00:11:55 | 显示全部楼层
wow7jiao 发表于 2019-4-11 22:04
第一句 和 第二句我已经明白了 ,空格 也是一个字符 ,sscanf()把空格放进c里

但是第三句是个错的 ...

1.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2019-4-13 11:00:44 | 显示全部楼层
老师
声明

下面是 sscanf() 函数的声明。
int sscanf(const char *str, const char *format, ...)-这个第一参数是const,就是一个常量,现在放进static char lastc[] = ' ',是一个静态局部变量,静态局部变量是不是也可以当常量用(这种写法很新颖)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-10-3 14:19

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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