首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用整数而不是减号、乘法或除法读加号。

用整数而不是减号、乘法或除法读加号。
EN

Stack Overflow用户
提问于 2015-06-14 17:13:26
回答 2查看 1.8K关注 0票数 2

在编写算术表达式简化器时,我只是观察到了这种奇怪的行为。重新创建了以下问题:

代码语言:javascript
运行
复制
#include <stdio.h>

int main(void)
{
    int n, i;
    char s[200];

    for(i=0;i<2;i++){
        if(scanf("%d", &n) == 1)
        {
            printf("%d\n", n);
        } else {
            scanf("%s", s);
            printf("%s\n", s);
        }
    }
    return 0;
}

如果输入是5+10,则在n中读取5,在s中读取10。但是,对于其他标志,即5-10,它读5 in n-10 in s,这是预期的输出。

我的问题是:是哪些C特性导致了这一点?查看了: gcc版本4.8.2和ideone。

编辑

通过对整数的字符读取来解决char问题。感谢你的时间。:)

如果有人感兴趣:http://ideone.com/rOPyQD

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-06-14 17:29:19

如果输入是5+10,它读取5 in n和10 in s。但是,对于其他符号,即5-10,它读5 in n,-10 in s,这是预期的输出。

您错了,因为您可以通过更改printf()语句来确定,这样您就可以区分哪个语句生成每个输出。然后,您会发现您的程序是在循环的第一次迭代中将5读入n,然后在第二次迭代中将10-10读入n,而不是s

这是因为%d字段描述符读取可选带符号的十进制整数。“可选签名”的意思是,在前面紧跟-表示否定,而+表示肯定。因此,"+10""-10"都可以通过%d字段进行扫描。

票数 3
EN

Stack Overflow用户

发布于 2015-06-14 17:35:14

这两本书都在读

代码语言:javascript
运行
复制
if(scanf("%d", &n) == 1)

在第一种情况下,当键入5+10时,第一次迭代5在n中读取,在第二次迭代+10在n中读取。

代码语言:javascript
运行
复制
printf("%d\n", n);

请注意,在printf中使用的是"%d“,而不是"%s”。这里没有调用带有"%s“的printf语句。

这也解释了第二个案件。-10正在读入“n”,并使用"%d“打印。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30832254

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档