C语言的基本输入输出函数
1. 字符输入输出函数 getchar()
、putchar()
getchar()
:从标准输入(通常是键盘)读取一个字符,并返回其ASCII值。putchar()
:将指定的字符(由其ASCII值表示)写入标准输出(通常是屏幕)。
示例代码:
#include <stdio.h>int main() {char ch;// 使用getchar()读取字符printf("请输入一个字符: ");ch = getchar();// 使用putchar()输出字符printf("你输入的字符是: ");putchar(ch);return 0;
}
2. 格式输入输出函数 scanf()
、printf()
scanf()
:从标准输入读取格式化的输入。printf()
:将格式化的数据写入标准输出。
示例代码:
#include <stdio.h>int main() {int num;// 使用scanf()读取整数printf("请输入一个整数: ");scanf("%d", &num);// 使用printf()输出整数printf("你输入的整数是: %d\n", num);return 0;
}
3. 字符串输入输出函数 gets()
、puts()
(注意:gets()
在C11标准中已被弃用)
gets()
(已弃用):从标准输入读取一行,直到遇到换行符或EOF,然后丢弃换行符。由于它不会检查缓冲区溢出,因此不推荐使用。puts()
:将指定的字符串写入标准输出,并在末尾添加一个换行符。
示例代码(使用 fgets()
替代 gets()
):
#include <stdio.h>#define MAX_LINE_LENGTH 100int main() {char line[MAX_LINE_LENGTH];// 使用fgets()读取一行printf("请输入一行文本: ");fgets(line, MAX_LINE_LENGTH, stdin);// 使用puts()输出这行文本puts(line);return 0;
}
注意:在上面的示例中,我使用了 fgets()
函数来替代 gets()
,因为 gets()
函数存在缓冲区溢出的风险。fgets()
函数允许你指定一个最大长度,从而防止溢出。
构造类型数据——数组
- 一维数组的基本概念,存储方式
一维数组是由具有相同类型的元素的集合所组成的数据结构,这些元素在内存中连续存放,通过数组名和索引(或称为下标)来唯一确定数组中的每个元素。
存储方式:一维数组在内存中是连续存放的,第一个元素的地址是数组的基地址,其他元素的地址是基地址加上偏移量(即元素大小乘以下标)。
2) 一维数组元素的引用、初始化及输入输出
引用:通过数组名和索引来引用数组元素,如 array[index]
。
初始化:可以在声明数组的同时进行初始化,如 int array[5] = {1, 2, 3, 4, 5};
。
输入输出:使用循环和 scanf
、printf
函数进行输入输出。
#include <stdio.h>int main() {int array[5] = {1, 2, 3, 4, 5};for (int i = 0; i < 5; i++) {printf("%d ", array[i]); // 输出}printf("\n");int value;for (int i = 0; i < 5; i++) {scanf("%d", &array[i]); // 输入}return 0;
}
3) 二维数组的基本概念,存储方式
二维数组是由一维数组组成的数组,即数组的数组。每个一维数组称为二维数组的行。二维数组在内存中也是连续存放的,但先存放第一行的所有元素,再存放第二行的所有元素,以此类推。
存储方式:二维数组在内存中是按行存储的,即先存储第一行的所有元素,然后存储第二行的所有元素,依此类推。
4) 二维数组元素的引用、初始化及输入输出
引用:通过数组名、行索引和列索引来引用二维数组元素,如 array[row][col]
。
初始化:可以在声明二维数组的同时进行初始化,如 int array[2][3] = {{1, 2, 3}, {4, 5, 6}};
。
输入输出:使用嵌套循环和 scanf
、printf
函数进行输入输出。
#include <stdio.h>int main() {int array[2][3] = {{1, 2, 3}, {4, 5, 6}};for (int i = 0; i < 2; i++) {for (int j = 0; j < 3; j++) {printf("%d ", array[i][j]); // 输出}printf("\n");}int value;for (int i = 0; i < 2; i++) {for (int j = 0; j < 3; j++) {scanf("%d", &array[i][j]); // 输入}}return 0;
}
5) 字符数组的基本概念,存储方式
字符数组是用于存储字符的数组,可以存储字符串(以 ‘\0’ 结尾的字符序列)。字符数组在内存中的存储方式与一维数组相同。
6) 字符串的初始化及输入输出
初始化:可以在声明字符数组的同时进行初始化,如 char str[] = "Hello, World!";
。注意,字符串会自动在末尾添加 ‘\0’ 作为结束符。
输入输出:使用 scanf
、printf
或 gets
、puts
函数进行输入输出。但 scanf
在读取字符串时不会读取空格,所以通常使用 fgets
来读取包含空格的字符串。
#include <stdio.h>int main() {char str[20] = "Hello, World!";printf("%s\n", str); // 输出fgets(str, 20, stdin); // 输入,注意 fgets 会读取换行符,但通常我们不需要它,所以可能需要手动去除str[strcspn(str, "\n")] = 0; // 去除换行符printf("%s\n", str); // 输出return 0;
}
注意:strcspn
函数用于获取字符串中第一个指定字符集(这里是换行符)之前的子串的长度,这里用来去除换行符。如果你的编译器或环境中