c - 打印位数而不是实际值
问题描述
我对 C 和一般编码真的很陌生,如果这是一个简单的问题,我很抱歉。
我要做的就是输入一些数字,将它们相加,然后以两种不同的方式打印总和。但是由于某种原因printf("%li", z);
,代码行仅打印数字 plus 中的位数1
。
有人可以向我解释为什么它会这样做吗?为什么重要的是,我实际上并没有太在意让它工作,因为我只是在玩耍和练习。谢谢!
我的代码如下:
#include <cs50.h>
#include <stdio.h>
int main(void) {
long x = get_long("what is x: ");
long y = get_long("what is y: ");
long z = printf("%li\n", x + y + y);
printf("%li", z);
}
解决方案
错误就在这条线上
long z = printf("%li\n", x + y + y);
printf("%li", z);
打印数字中的位数加一的原因是printf
该函数返回写入输出流(stdout——控制台——在你的情况下)上的字符数,在这里你printf("%li\n", x + y + y);
试图写x+y+y
by \n
(这是一个附加字符)。
printf
在名为stdout
. 阅读本文了解更多详情。
请,如果您是 C 语言的新手,我建议您不要在没有适当基础知识(变量、指针、动态内存分配、文件)的情况下尝试学习更多“高级”内容,例如printf
or scanf
(和*printf
或*scanf
函数系列)。如果您想尝试小程序以查看它们是否成功,您可以使用调试器 ( gdb
)。但是为了理解这些函数的使用,你需要了解一些基本的东西,否则你会得到类似的神奇语法scanf("%s %d", mystr, &myint)
,你不知道为什么mystr
不需要&
while myint
。因此,如果您没有这些基础知识,请在继续对文件进行 IO 之前学习它们(stdout 和 stdin是文件)。
推荐阅读
- angularjs - Angular 的 Scope 与模型有何不同?
- java - Spring Data Rest @RepositoryRestResource 和 Jackson @JsonView
- javascript - Webpack css 问题,缺少 bundle.css
- android - 使用 Espresso-Intents 测试与 SpeechRecognizer 的交互
- ruby - 用于检查数字的 Rspec
- python - 在 pytorch 中计算多重损失的“loss.backward”是否有效?
- sql - 在 DB2 中合并来自两个数据库的数据
- javascript - vaadin 文本字段正则表达式模式的小时和分钟
- javascript - 如何在 JMeter 中查看 JS(具有 Post Ajax 调用)的响应数据
- mysql - 单个查询中的动态截止日期查找器