网站建设合同 售后维护期扬州seo招聘
| 标准文件 | 文件指针 | 设备 | 
|---|---|---|
| 标准输入 | 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 
 
 
 
 
 
