C语言/C++常见习题问答集锦(五十八) 之输入或输出控制的颠覆式理解

C语言/C++常见习题问答集锦(五十八) 之输入或输出控制的颠覆式理解

程序之美

在这里插入图片描述

首先我们先有一道题目引出我们今天的话题,什么题目呢,您上眼:

以下程序的输出结果是

#include<stdio.h>

int main(){
    int a =2, c =5;
    printf("a =%% d, b =% %d\n",a ,c);
    return 0;
}

A 、 a =%2, b =%5 B 、 a =2, b =5
C 、 a =%% d , b =%% d D 、 a =% d , b =% d
题目咋看很简单,有几个人能做出正确结果呢?

在这里插入图片描述
不少小伙伴会选择A吧
a =%2, b =%5

好,下面让我们先不说答案,我们先用事实说话,看看机器运行的情况是什么,我们再进一步分析。

将代码拷贝到visual studio code中,如下:

在这里插入图片描述
编译运行,如下:

在这里插入图片描述看到结果了么,可能此时很多小伙伴瞬间崩塌了,结果是什么?

a =% d, b =%d

答案: D

很多小伙伴就不理解了,怎么结果是D呢?
下面我们详细讲解下:
首先我们先看下C语言关于输入输出控制中%的有关定义。

C语言中%有两种意思,第一表示求余符号,经常会用到判断一个数是不是能被另一个整除。

如:7%3=1(7除以3,余下1,) 1%3=1(1除以3除不尽,余下1);

如判断一个m是奇数还是偶数?代码如下:if(m%2==0) print f(“偶数”)。

2、引导符,用于引导输入输出项表列的格式。

例如:print f("%d%c%f",a,b,c);意思就是a以整型输出,b以字符型输出,c以实型输出。

C语言中,%%是输出%号,%是转义符,也就是和%一起出现的后面的内容会转义后输出,这三种输出的意义是不同的:

1、%d,表示按整型输出后面给出的变量的值,%nd 输出的整型宽度至少为n位,右对齐,]即宽度至少为5位,位数大于5则输出实际位数,%0nd 用得比较多,表示输出的整型宽度至少为n位,不足n位用0填充。

2、%%d ,这就会被拆成两部分看待,一是“%%”在C语言中就是输出一个“%”,而是“d”就是一个普通字符,所以当“%%d”在一起时,其含义就是输出“%d”这两个字符。

3、%%%d ,3个%在一起,进行拆分的话,%%代表一个“%”字符,后面的%d又代表整型输出变量的值,所以当“%%%d”一起时,其最终含义就是输出一个字符%号再接着按整型输出变量的值。
为了加深理解,我们通过几个例子来了解:

例如:

int i=4;
printf("%d\n",i);//此条输出结果为:4

printf("%%d\n");//此条语句输出结果为:%d

printf("%%%d\n",i,i);//此条语句输出结果为:%4

上述代码执行后,输出结果为:

4
%d
%4

好了,看完定义,我们在来看下题目:

printf("a =%% d, b =% %d\n",a ,c);

字符串"a =%% d“中,因为”%% d“,中间有空格,而%%为输出%号,所以输出为a=% d
字符串 b =% %d中,到底如何进行呢,我们做如下验证,

#include <stdio.h>

int main()
{
	int a =2, c =5;
	printf("a=%%\n");
	printf("b=% %\n");
	printf("a =%% d, b =% %d\n",a ,c);
	getchar();
	return 0;
}

运行结果为:
在这里插入图片描述
可以看出,无论是”%%“或者”%空格%“,都会输出为%,所以到这里,我相信小伙伴们一定一目了然了,
”b =% %d“,一样输出为b=%d

所以这个题目的答案为D、 a =% d , b =% d
在这里插入图片描述

我相信到这里,肯定有很多小伙伴感觉受教了,因为在平常的工作或者学习过程中,我们几乎很少遇到这样的输入输出情况,我们也基本上不这么去使用它,但是确实它符合C语言语法规则,这就算是给我自己,同时也给小伙伴们一个警示吧,C语言,博大精深,我们需要花费很大的时间和精力去学习它,理解它,才能更好的去使用它,小伙伴们,加油吧。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

五一编程

程序之路有我与你同行

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值