c语言二维字符数组的输入输出

在C语言中,二维字符数组(也称为字符串数组)的输入和输出涉及到如何正确地处理字符数组的存储、输入数据以及输出数据。以下是详细的说明:

1. 定义和初始化二维字符数组

c
#define ROWS 3 #define COLS 20 char strings[ROWS][COLS]; // 定义一个二维字符数组,包含ROWS行和COLS列

这里定义了一个二维字符数组 strings,其中 ROWS 表示数组的行数,COLS 表示每行的最大字符数(包括字符串结尾的空字符 \0)。

2. 输入二维字符数组

从键盘输入

c
#include <stdio.h> void inputStrings(char arr[][COLS], int rows) { printf("Enter %d strings:\n", rows); for (int i = 0; i < rows; ++i) { printf("String %d: ", i + 1); scanf("%s", arr[i]); // 注意这里不需要取地址符& } }
  • 使用 scanf 函数输入每一行字符串。在输入时,scanf 会自动在字符串末尾添加空字符 \0

示例:

c
inputStrings(strings, ROWS);

从文件输入

c
#include <stdio.h> void inputFromFile(char arr[][COLS], int rows, const char *filename) { FILE *file = fopen(filename, "r"); if (file == NULL) { printf("Error opening file %s\n", filename); return; } for (int i = 0; i < rows; ++i) { if (fscanf(file, "%s", arr[i]) != 1) { printf("Error reading from file.\n"); break; } } fclose(file); }

3. 输出二维字符数组

输出到屏幕

c
void outputStrings(char arr[][COLS], int rows) { printf("Outputting %d strings:\n", rows); for (int i = 0; i < rows; ++i) { printf("String %d: %s\n", i + 1, arr[i]); } }
  • 使用 printf 函数输出每一行字符串。

示例:

c
outputStrings(strings, ROWS);

输出到文件

c
void outputToFile(char arr[][COLS], int rows, const char *filename) { FILE *file = fopen(filename, "w"); if (file == NULL) { printf("Error opening file %s\n", filename); return; } for (int i = 0; i < rows; ++i) { fprintf(file, "%s\n", arr[i]); } fclose(file); }
  • 使用 fprintf 函数将每一行字符串输出到文件中。

示例程序

c
#include <stdio.h> #define ROWS 3 #define COLS 20 void inputStrings(char arr[][COLS], int rows) { printf("Enter %d strings:\n", rows); for (int i = 0; i < rows; ++i) { printf("String %d: ", i + 1); scanf("%s", arr[i]); // 注意这里不需要取地址符& } } void outputStrings(char arr[][COLS], int rows) { printf("Outputting %d strings:\n", rows); for (int i = 0; i < rows; ++i) { printf("String %d: %s\n", i + 1, arr[i]); } } void outputToFile(char arr[][COLS], int rows, const char *filename) { FILE *file = fopen(filename, "w"); if (file == NULL) { printf("Error opening file %s\n", filename); return; } for (int i = 0; i < rows; ++i) { fprintf(file, "%s\n", arr[i]); } fclose(file); } int main() { char strings[ROWS][COLS]; // 输入字符串数组 inputStrings(strings, ROWS); // 输出到屏幕 outputStrings(strings, ROWS); // 输出到文件 outputToFile(strings, ROWS, "output.txt"); return 0; }

这个示例程序展示了如何输入、输出二维字符数组,并演示了从键盘输入、输出到屏幕和输出到文件的操作。在实际应用中,可以根据具体需求调整输入输出函数以及数组的大小和数据来源。