首页 > 解决方案 > 打印位数而不是实际值

问题描述

我对 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);
}

标签: ccs50

解决方案


错误就在这条线上

long z = printf("%li\n", x + y + y);

printf("%li", z);打印数字中的位数加一的原因是printf该函数返回写入输出流(stdout——控制台——在你的情况下)上的字符数,在这里你printf("%li\n", x + y + y);试图写x+y+yby \n(这是一个附加字符)。

printf在名为stdout. 阅读本文了解更多详情。

请,如果您是 C 语言的新手,我建议您不要在没有适当基础知识(变量、指​​针、动态内存分配、文件)的情况下尝试学习更多“高级”内容,例如printfor scanf(和*printf*scanf函数系列)。如果您想尝试小程序以查看它们是否成功,您可以使用调试器 ( gdb)。但是为了理解这些函数的使用,你需要了解一些基本的东西,否则你会得到类似的神奇语法scanf("%s %d", mystr, &myint),你不知道为什么mystr不需要&while myint。因此,如果您没有这些基础知识,请在继续对文件进行 IO 之前学习它们(stdout 和 stdin文件)。


推荐阅读