C语言的基本输入输出函数+构造类型数据——数组

C语言的基本输入输出函数

1. 字符输入输出函数 getchar()、putchar()

  • getchar():从标准输入(通常是键盘)读取一个字符,并返回其ASCII值。
  • putchar():将指定的字符(由其ASCII值表示)写入标准输出(通常是屏幕)。

示例代码:

c 复制代码
#include <stdio.h>

int main() {
    char ch;

    // 使用getchar()读取字符
    printf("请输入一个字符: ");
    ch = getchar();

    // 使用putchar()输出字符
    printf("你输入的字符是: ");
    putchar(ch);

    return 0;
}

2. 格式输入输出函数 scanf()、printf()

  • scanf():从标准输入读取格式化的输入。
  • printf():将格式化的数据写入标准输出。

示例代码:

c 复制代码
#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()):

c 复制代码
#include <stdio.h>

#define MAX_LINE_LENGTH 100

int main() {
    char line[MAX_LINE_LENGTH];

    // 使用fgets()读取一行
    printf("请输入一行文本: ");
    fgets(line, MAX_LINE_LENGTH, stdin);

    // 使用puts()输出这行文本
    puts(line);

    return 0;
}

注意:在上面的示例中,我使用了 fgets() 函数来替代 gets(),因为 gets() 函数存在缓冲区溢出的风险。fgets() 函数允许你指定一个最大长度,从而防止溢出。

构造类型数据------数组

  1. 一维数组的基本概念,存储方式

一维数组是由具有相同类型的元素的集合所组成的数据结构,这些元素在内存中连续存放,通过数组名和索引(或称为下标)来唯一确定数组中的每个元素。

存储方式:一维数组在内存中是连续存放的,第一个元素的地址是数组的基地址,其他元素的地址是基地址加上偏移量(即元素大小乘以下标)。

2) 一维数组元素的引用、初始化及输入输出

引用 :通过数组名和索引来引用数组元素,如 array[index]。

初始化 :可以在声明数组的同时进行初始化,如 int array[5] = {1, 2, 3, 4, 5};。

输入输出 :使用循环和 scanf、printf 函数进行输入输出。

c 复制代码
#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 函数进行输入输出。

c 复制代码
#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 来读取包含空格的字符串。

c 复制代码
#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 函数用于获取字符串中第一个指定字符集(这里是换行符)之前的子串的长度,这里用来去除换行符。如果你的编译器或环境中

相关推荐
lzhdim5 分钟前
C#不为人知的10个魔法特性:资深开发者也会震惊的底层奥秘
java·前端·javascript·算法·c#
weixin_3077791311 分钟前
C++代码实现MATLAB中的pade函数功能
开发语言·c++·算法·matlab
smj2302_7968265214 分钟前
解决leetcode第4064题至多一次取反能被k整除的最长子数组II
python·算法·leetcode
AIGC小尼18 分钟前
ACE-Step-1.5 本地 AI 音乐模型实战|text2music 歌词转人声,部署脚本、参数调优与排坑全记录
人工智能·算法·comfyui·ai漫剧
ProcessOn官方账号18 分钟前
java IO操作 你快速认识IO的相关基本知识
java·开发语言
YOLO数据集集合25 分钟前
树木检测数据集 | 树木检测 树种分类 航拍林业 森林监测9131期
人工智能·算法·机器学习·分类·数据挖掘·林业·树种分类
青山木30 分钟前
Hot 100 --- 下一个排列
java·数据结构·算法·leetcode
垆边人似月.33 分钟前
字符串重排后最大字典序
算法·leetcode·职场和发展
码流子34 分钟前
AI稽核精灵-Agent落地
大数据·人工智能·物联网·算法·系统架构
神仙别闹35 分钟前
基于C++实现的(控制台)学校开课查询系统
开发语言·c++