本文主要是介绍【C语言】标准输入/输出(printf, scanf, gets, puts, getchar, putchar),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
标准文件 | 文件指针 | 设备 |
---|---|---|
标准输入 | stdin | 键盘 |
标准输出 | stdout | 屏幕 |
标准错误 | stderr | 您的屏幕 |
标准输入/输出的函数在标准库stdio.h。
#include <stdio.h>
1、printf 输出
printf :格式化输出,输出到标准输出stdout中。
printf: int printf(const char *format, ...)
参数:format是字符串(包含输出的内容,也可以包含占位符(格式化说明符))。
返回:输出的字符总数。若失败,返回负数。
注意:printf 输出不包括换行符'\n',需手动添加。
format 说明符(占位符):
类型 | 合格的输入 | 参数的类型 |
---|---|---|
%a、%A | 读入一个浮点值(仅 C99 有效)。 | float |
%f、%F | 浮点数。以小数形式输出单、双精度实数。例如:-732.103 | float |
%e、%E | 浮点数。以指数形式输出单、双精度实数。例如:7.12e4 | float |
%g、%G | 浮点数。以%f或%e中较短的输出宽度输出单、双精度实数 | float |
%i | 读入十进制,八进制,十六进制整数 。 | int |
%d | 十进制整数。正数不输出符号 | int |
%o | 八进制整数。 | int |
%x、%X | 十六进制整数。 | int |
%u | 无符号的十进制整数。 | unsigned int |
%c | 单个字符 | char |
%s | 字符串。将读取连续字符,直到遇到一个空格字符(空格字符可以是空白、换行和制表符)。 | char |
%p | 读入一个指针 。(指针存储内存地址。获取内存地址:&变量名) | |
%[] | 扫描字符集合 。 | |
%% | 读 % 符号。 |
#include <stdio.h>int main(void)
{int i = 10;float f = 3.1415926;char c = 'a';char s[6] = "hello";printf("int m: %6d \n", i); // 宽度为6的整数printf("float k: %.2f \n", f); // 2位小数的浮点数printf("char c: %c \n", c); // 单个字符printf("string s: %s \n", s); // 字符串printf("string s = %s, the first char is %c \n", s, s[0]); // 字符串中第一个字符printf("int m memory address is %p \n", &i); // 整数m的内存地址return 0;
}// 结果:
int m: 10
float k: 3.14
char c: a
string s: hello
string s = hello, the first char is h
int m memory address is 000000000061FE14
2、scanf 输入
scanf :从标准输入stdin,读取格式化输入。
scanf: int scanf(const char *format, ...)
参数:format是字符串(包括占位符)。
返回:成功匹配或赋值的个数。若到达文件末尾或发生错误,返回NULL。
注意:scanf 碰到空格就停止读取。
// scanf 不能显示输入的提示信息,用printf 提前输出提示信息。
#include <stdio.h>int main(void)
{char s[16];printf("Input: ");scanf("%s", s); // 读取输入的字符串printf("Output: %s", s);return 0;
}// 结果:
Input: good luck 【输入:good luck】
Output: good
// 若scanf中有提示信息,则输入内容时要手动把提示信息一并输入。
#include <stdio.h>int main(void)
{char s[16];// printf("Input: ");scanf("Input: %s", s); // 读取输入的字符串(提示信息也需输入)printf("Output: %s", s);return 0;
}// 结果:
Input: good luck 【输入:Input: good luck】
Output: good
字符串是指针,指向字符数组。字符串名本身就表示了内存地址(第一个字符的内存地址)。
而整数,则需要通过 "&变量名" 获取内存地址。
#include <stdio.h>int main(void)
{int m, n;printf("Input two number: ");scanf("%d %d", &m, &n); // 读取输入的整数printf("Output two number: %d %d", m, n);return 0;
}// 结果:
Input two number: 1 2 【输入:1 2】
Output two number: 1 2
3、gets, puts 输入/输出整行字符
gets(s):读取输入的一行字符串,从标准输入stdin读取一行 并存储到字符串s指向的内存空间。
gets: char *gets(char *str)
参数:str是指向字符数组的指针,该数组存储读取的字符串。
返回:指针,指向读取到的字符串。若没有读取到内容或发生错误,返回NULL。
注意:读取到换行符 或到达文件末尾 就停止。
可能导致缓冲区溢出,若避免,可使用fgets函数,例如:fgets(str, 20, stdin)从标准输入stdin读取最多20个字符(包括结束符'\0')存储到str指向的内存。
puts(s):输出字符串,将字符串s写入到标准输出stdout中。
puts: int puts(const char *str)
参数:str是要输出的字符串。
返回:字符串长度(包括结束符'\0')。若发生错误,返回NULL。
注意:碰到空字符就停止,且输出中不包括空字符。换行符会被追加到输出中(即输出中包括换行符'\n')。
#include <stdio.h>int main(void)
{ char s[16];printf("Input: ");gets(s); // 读取输入的内容printf("Output: ");puts(s); // 输出读取的内容return 0;
}// 结果:
Input: good luck 【输入:good luck】
Output: good luck
4、getchar, putchar 输入/输出一个字符
getchar():读取输入的一个字符,从标准输入stdin获取一个字符(包括回车)。
getchar: int getchar(void)
参数:无。
返回:读取的字符(无符号char强制转为int形式) 。如果到达文件末尾或发生读错误,则返回 EOF。
注意:正常输入以按回车(换行符'\n') 结束。
putchar(c):输出一个字符,即将指定字符写入到标准输出stdout。
putchar: int putchar(int char)
参数:char是要输出的字符。
返回:输出的字符(无符号char强制转为int形式) 。如果发生错误,则返回 EOF。
#include <stdio.h>int main(void)
{char c;printf("Enter a value: ");c = getchar(); // 读取输入的内容printf("The value is: ");putchar(c); // 输出一个字符return 0;
}// 结果:
Enter a value: abc 【输入abc】
The value is: a
同一时间只能输入/输出一个字符,可用循环输入/输出多个字符。
#include <stdio.h>int main(void)
{ printf("Enter a value: ");char c;// 通过循环输入/输出多个字符while((c = getchar()) != '\n' && c != EOF){putchar(c);} return 0;
}// 结果:
Enter a value: abc 【输入abc】
abc
这篇关于【C语言】标准输入/输出(printf, scanf, gets, puts, getchar, putchar)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!