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语言,博大精深,我们需要花费很大的时间和精力去学习它,理解它,才能更好的去使用它,小伙伴们,加油吧。