C语言基本的输入和输出函数(printf()和scanf() )

时间:2022-09-05 21:43:43

printf() -- 将变量的内容输出到显示器上,有四种用法:

1、printf("字符串\n");

printf("欢迎学习C语言\n"),\n是转义字符,表示换行,和java类似。
2、printf(“输出控制符”,输出参数);

int i = 10;
printf("%d",i); //d表示十进制,有个疑惑,本身我们给 i 赋值就是按照十进制赋值的,这里为什么要加上%d呢?岂不是多次一举吗?其实不然,虽然我们是按照十进制的赋值,但是实际上在计算机存储的时候,是按照二进制存储的,所以我们需要加上输出格式,因为不同的格式,这个值就是不一样了,例如printf(%x,i);那么此时输出的是十六进制的10,显示的是a,printf(%B\n,i);输出B。

3、printf("输出控制符1 输出控制符2 ……输出控制符n”,输出参数1 ,输出参数2,……输出控制符n);这样可以一个printf把n个参数输出。注意:" " 里的控制符1—n中间是没有逗号隔开的,但是后边的输出参数1—n中间是有逗号做为分割存在,每个控制符对应一个参数。

# include <stdio.h>
int main(void){
int i = 3;
int j = 5;
int k = 23;
printf("%d\n%d\n%d\n", i,j,k);
return 0;
}
4、printf("输出控制符 非输出控制符“,输出参数); 例如printf("%d\n , i");以%开头的是输出控制符,输出控制符包含如下:

%d                      --     对int类型输出

%ld                     --     对long int 类型

%c                      --     char

%f                       --     float

%lf                      --     double

%x(或者%X或者%#X)        --     int   或long int 或short int (这个用法非常重要,要掌握好)

%o                      --  同上

%s                      --     字符串输出

# include <stdio.h>
int main(void){
int i = 47; //47是十进制,如果要用其他进制,请参考进制之前博客内容
printf("%x\n", i); //输出结果是2f
printf("%X\n", i); //输出结果是2F
printf("%#x\n", i); //输出结果是0x2f
printf("%#X\n", i); //输出结果是0X2F,推荐使用
return 0;
}

为什么需要输出控制符呢?

1、01组成的代码可以表示数据也可以表示指令。

2、如果01组成的代码表示的是数据的话,那么同样的01代码组合以不同的格式输出,那么就会有不同的输出结果。


Scanf()的用法:通过键盘将数据输入到变量中

两种格式:

用法一:scanf(“输入控制符”, 输入参数);

功能:将从键盘输入的字符转化为输入控制符所规定格式的数据,然后存入已输入参数的值为地址的变量中。因为我们从键盘上输入数字,例如123,但是电脑识别是把它按照字符来识别的(电脑识别所有输入都是字符),因此我们需要指定一个正确的类型让电脑按照这个来处理。

# include<stdio.h>

int main(void){
int i;
scanf("%d", &i); //&i 表示i的地址,&是一个取地址符
printf("i = %d\n", i);

return 0;
}

用法二:scanf(“非输入控制符 输入控制符”, 输入参数);非输入控制符必须原样输入,否则会报错。

# include<stdio.h>

int main(void){
int i;
scanf("m%d\n", &i);//有了非输出控制符m,就要求输入格式必须按照这格式,先输m再输数值
printf("i = %d\n", i);
return 0;
}
/*输入和输出参数分别对应如下:
123 : 错误
m123 : 123
m123b : 123
*/
用法三:一次给多个变量键盘赋值

# include<stdio.h>

int main(void){
int i, j;
scanf("%d %d", &i, &j);
printf("i = %d, j = %d\n", i, j);

return 0;
}
/*
如果我们这样写:scanf("%d,%d", &i,&j),那么我们输入的时候不能输1 2 或者1回车2,那么这样只能输入i,j会报错;
正确输入方式应该是1,3 。因为逗号是非输入控制符,所以我们按照输出。
*/


如何使用scanf编写出高质量的程序?减少非控制符的输入:

1、使用scanf之前,先用printf提示用户以什么样的方式输入

2、scanf中尽量不要使用非输入控制符,尤其不要使用\n;

3、应该编写代码对用户的非法输入做适当的处理

char ch;
while ((ch = getchar()) !='\n')
continue;
正确写法如下:
# include<stdio.h>
int main(void){
int i;

//scanf("%d\n",&i);//非常不好的格式,不要加\n,不然输入的时候必须加\n才能结束
scanf("%d", &i);
printf("%d\n", i);

return 0;
}