"C语言多行输入:给你6种方法"

   360SEO    

C语言是一种广泛应用于系统编程、嵌入式系统、操作系统、游戏制作等领域的高级编程语言。在C语言中,多行字符串的输入是一项基本的操作。本文将介绍三种常用的输入多行字符串的方法,并分别提供详细的步骤和示例代码。

使用fgets()函数读取整行字符串

fgets()函数用于从标准输入(通常是键盘)读取一行字符,并将其存储到指定的缓冲区中。其语法如下:

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

其中,str是指向一个字符数组的指针,用于存储读取的字符串;n是要读取的最大字符数(含空字符);stream是一个指向文件的指针,通常用stdin表示从标准输入读取字符。

具体步骤和示例代码如下:

C语言输入多行字符串
#include <stdio.h>
int main() {
    char str[100][100]; // 定义一个二维字符数组用于存储多行字符串
    int i;
    printf("请输入多行字符串(每行不超过99个字符):");
    for (i = 0; i < 5; i++) { // 假设要输入5行字符串
        fgets(str[i], sizeof(str[i]), stdin); // 读取一行字符串并存储到str[i]中
    }
    // 打印输入的多行字符串
    for (i = 0; i < 5; i++) {
        printf("%s", str[i]);
    }
    return 0;
}

使用循环结构逐行读取字符串

循环结构逐行读取字符串的核心思想是,循环读取字符,直到遇到换行符为止,表示读取完一整行字符串。具体步骤和示例代码如下:

C语言输入多行字符串
#include <stdio.h>
#include <string.h>
int main() {
    char str[100][100]; // 定义一个二维字符数组用于存储多行字符串
    int i, j;
    char temp[100]; // 临时存储每一行的字符串
    printf("请输入多行字符串(每行不超过99个字符):");
    for (i = 0; i < 5; i++) { // 假设要输入5行字符串
        j = 0;
        while (fgets(temp, sizeof(temp), stdin) != NULL && temp[j] != '\n') {
            str[i][j] = temp[j]; // 将读取的字符存储到str[i]中
            j++;
        }
        str[i][j] = '\0'; // 在每一行的末尾添加空字符,表示字符串结束
    }
    // 打印输入的多行字符串
    for (i = 0; i < 5; i++) {
        printf("%s", str[i]);
    }
    return 0;
}

使用scanf()函数读取字符串,并在每行末尾添加换行符

scanf()函数是C语言中用于标准输入的格式化输入函数,可以按指定格式从标准输入读取数据。可以使用类似scanf("%s", str)的语句从标准输入读取一行字符串,但在读取时需要按下回车键表示输入完成,这个回车键会被scanf()函数存储为换行符(\n)。具体步骤和示例代码如下:

C语言输入多行字符串
#include <stdio.h>
#include <string.h>
#include <ctype.h> // 包含isspace()函数,用于判断字符是否为空白字符(空格、制表符等)
int main() {
    char str[100][100]; // 定义一个二维字符数组用于存储多行字符串
    int i, j;
    char temp[100]; // 临时存储每一行的字符串
    int len; // 当前行的长度计数器
    int max_len = 99; // 每行的最大长度限制为99个字符(包括空字符)
    int is_new_line = 1; // 标记是否为新的一行开始的标志位,默认为1表示是新的一行开始,0表示不是新的一行开始(即当前行为上一行的延续)
    int c; // 临时变量,用于存储从标准输入读取的字符值
    printf("请输入多行字符串(每行不超过99个字符):");
    for (i = 0; i < 5; i++) { // 假设要输入5行字符串,初始化为第1行开始读取
        j = 0; // 重置当前行的索引计数器为0,用于存储读取的字符到str[i]中的位置索引位置上
        len = 0; // 重置当前行的长度计数器为0,用于记录当前已经读取的字符数(不包括空字符)
        is_new_line = 1; // 重置标志位为1,表示当前行为新的一行开始读取(即用户按下回车键后)或继续读取上一行的延续部分(即用户未按下回车键)
        while ((c = getchar()) != EOF) { // 循环读取标准输入中的字符,直到遇到文件结束符EOF为止(通常由Ctrl+D触发)或用户按下回车键为止(即表示输入完成)
            if (len < max_len - 1 && !isspace(c)) { // 当前行还没有读满,且当前字符不是空白字符时,存储到缓冲区中,更新计数器
                temp[j] = c;
                j++;
                len++;
                is_new_line = 0; // 标记当前行为续行,即当前行为上一行的延续部分
            }
            else { // 当前行已经达到最大长度限制,或当前字符为换行符时
                if (!is_new_line) { // 上一行还未结束,需要打印当前行,并且在末尾添加换行符
                    temp[j] = '\n';
                    j++;
                    len++;
                    temp[j] = '\0';
                    strcpy(str[i], temp);
                    printf("%s", str[i]);
                    break;
                }
                if (c == '\n') { // 当前字符为换行符,表示已经读取完一整行字符串,存储到二维字符数组中,准备读取下一行
                    temp[j] = c;
                    j++;
                    len++;
                    temp[j] = '\0'; // 在末尾添加空字符,表示字符串结束
                    strcpy(str[i], temp); // 将已经读取的一整行字符串存储到二维字符数组中
                    printf("%s", str[i]); // 打印刚刚读取的一整行字符串
                    break;
                }
            }
        }
        if (c == EOF) { // 已经读取完所有字符,不需要继续读取
            break;
        }
    }
    return 0;
}

结语

本文介绍了C语言中输入多行字符串的三种常用方法,并提供了详细的步骤和示例代码。使用这些方法,可以在不同的场景和要求下,灵活地处理输入多行字符串的问题。

如果您遇到了其他的C语言相关问题,欢迎留言讨论,我们一起交流学习。

谢谢观看!

欢迎评论、关注、点赞,感谢您的支持!

 标签:

评论留言

我要留言

欢迎参与讨论,请在这里发表您的看法、交流您的观点。