问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

C语言字符多行输入的三种方法:字符数组、fgets和getchar

创作时间:
作者:
@小白创作中心

C语言字符多行输入的三种方法:字符数组、fgets和getchar

引用
1
来源
1.
https://docs.pingcode.com/baike/994295

在C语言编程中,处理多行字符输入是一个常见的需求。本文将详细介绍三种实现方法:使用字符数组、fgets函数和getchar函数。通过具体的代码示例和参数解析,帮助读者掌握这些技术细节。

使用fgets函数

fgets函数是一个非常常用的输入函数,可以从标准输入读取一行字符数据,包括空白字符,直到读取到换行符或达到指定的最大字符数为止。以下是一个示例代码展示如何使用fgets函数来实现多行输入:

#include <stdio.h>

#define MAX_LINES 5
#define MAX_LENGTH 100

int main() {
    char lines[MAX_LINES][MAX_LENGTH];
    int i;

    printf("Enter up to %d lines of text:\n", MAX_LINES);
    for(i = 0; i < MAX_LINES; i++) {
        if(fgets(lines[i], MAX_LENGTH, stdin) == NULL) {
            break;
        }
    }

    printf("\nYou entered:\n");
    for(int j = 0; j < i; j++) {
        printf("%s", lines[j]);
    }

    return 0;
}

在这个示例中,程序将提示用户输入最多5行文本,每行最多100个字符,并将输入的文本存储在一个二维字符数组中。用户输入完成后,程序将打印出用户输入的所有行。

使用字符数组

字符数组是C语言中处理字符串的基本数据结构。通过定义一个二维字符数组,可以存储多行输入的数据。每行文本将存储在数组的一个元素中。

初始化字符数组

首先,需要定义一个二维字符数组来存储多行输入的数据。数组的行数可以根据实际需求进行调整。假设我们需要存储最多5行文本,每行最多100个字符,可以这样定义字符数组:

#define MAX_LINES 5
#define MAX_LENGTH 100

char lines[MAX_LINES][MAX_LENGTH];

读取用户输入

使用fgets函数读取用户输入,并将其存储在字符数组中。fgets函数会自动处理换行符,并在读取到换行符后停止读取。下面的代码展示了如何使用fgets函数读取多行输入:

int i;

for(i = 0; i < MAX_LINES; i++) {
    if(fgets(lines[i], MAX_LENGTH, stdin) == NULL) {
        break;
    }
}

在这个循环中,fgets函数会读取用户输入的每一行,并将其存储在字符数组的相应位置。如果用户输入的行数少于最大行数,循环会在读取到空行时停止。

使用fgets函数

fgets函数是C标准库中的一个函数,用于从指定的流中读取一行字符数据。它的函数原型如下:

char *fgets(char *str, int n, FILE *stream);

参数解析

  • str:用于存储读取到的字符数据的字符数组。
  • n:指定最多读取的字符数,包括终止符。
  • stream:指定输入流,通常为stdin表示标准输入。

fgets函数会从输入流中读取字符数据,直到读取到换行符或达到指定的最大字符数为止,并将读取到的字符数据存储在指定的字符数组中。

使用示例

下面是一个完整的示例代码,展示了如何使用fgets函数读取多行输入,并将输入的数据打印出来:

#include <stdio.h>

#define MAX_LINES 5
#define MAX_LENGTH 100

int main() {
    char lines[MAX_LINES][MAX_LENGTH];
    int i;

    printf("Enter up to %d lines of text:\n", MAX_LINES);
    for(i = 0; i < MAX_LINES; i++) {
        if(fgets(lines[i], MAX_LENGTH, stdin) == NULL) {
            break;
        }
    }

    printf("\nYou entered:\n");
    for(int j = 0; j < i; j++) {
        printf("%s", lines[j]);
    }

    return 0;
}

在这个示例中,程序会提示用户输入最多5行文本,每行最多100个字符,并将输入的数据存储在字符数组中。然后,程序会打印出用户输入的所有行。

使用getchar函数

getchar函数是C标准库中的另一个函数,用于从标准输入读取一个字符。通过结合使用getchar函数和循环结构,可以实现多行输入的功能。

读取单个字符

getchar函数会从标准输入读取一个字符,并返回该字符的ASCII值。如果读取到文件结束符(EOF),getchar函数会返回EOF。

int ch;
ch = getchar();

使用循环读取多行输入

通过结合使用getchar函数和循环结构,可以实现多行输入的功能。下面是一个示例代码,展示了如何使用getchar函数读取多行输入,并将输入的数据存储在字符数组中:

#include <stdio.h>

#define MAX_LINES 5
#define MAX_LENGTH 100

int main() {
    char lines[MAX_LINES][MAX_LENGTH];
    int i = 0, j = 0;
    int ch;

    printf("Enter up to %d lines of text:\n", MAX_LINES);
    while(i < MAX_LINES && (ch = getchar()) != EOF) {
        if(ch == '\n') {
            lines[i][j] = '\0';
            i++;
            j = 0;
        } else {
            lines[i][j] = ch;
            j++;
        }
    }

    printf("\nYou entered:\n");
    for(int k = 0; k < i; k++) {
        printf("%s\n", lines[k]);
    }

    return 0;
}

在这个示例中,程序会提示用户输入最多5行文本,并将输入的数据存储在字符数组中。然后,程序会打印出用户输入的所有行。通过检查换行符\n来区分不同的行,并在每行末尾添加字符串终止符\0

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号