首页 > 解决方案 > 从键盘读取单词并将它们放入矩阵中

问题描述

我必须从键盘上读取 5 个单词并将它们放入矩阵中。例如,如果我有单词 RED,则字母将在第一行的列之间拆分。红等。

这是我的代码,但它在我扫描 5 个字母后退出

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
int main()
{
char mat[3][3];

for(int i=0; i<2; i++)
    for(int j=0;j<2;j++)
    {
        scanf("%s", &mat[i][j]);
    }

for(int i=0; i<2; i++)
    for(int j=0;j<2;j++)
    {
        printf("%s\t",mat[i][j]);
    }

return 0;
}

标签: c

解决方案


由于您没有为字符串指定任何大小...我认为它们的长度是任意的...

// Takes input using the 'stdin' stream...
char* read_input(void)
{
    char ch;
    size_t len = 0;
    size_t size = len + 2;
    char* str = realloc(NULL, size);
    if (!str)
        return str;
    while ((ch = fgetc(stdin)) != -1 && ch != '\n')
    {
        str[len++] = ch;
        if (len == size)
        {
            str = realloc(str, size += 2);
            if (!str)
                return str;
        }
    }
    str[len++] = '\0';
    return realloc(str, len);
}

这个函数将读取输入,现在我们还需要一个函数来检查字符串是否是一个有效的单词......即它只包含字母......

// Checks whether the specified string is alphabetic or not...
int is_alpha_string(char* str, char* err_msg)
{
    for (unsigned i = 0u; i < strlen(str); i++)
        if (!isalpha(str[i]))
        {
            fprintf(stderr, err_msg);
            return 0;
        }
    return 1;
}

在此之后,只需执行以下操作:

// The 'main()' function...
int main(void)
{
    char* matrix[5];
    for (unsigned i = 0u; i < 5u; i++)
    {
        printf("Enter your word here: ");
        matrix[i] = read_input();
        i -= !is_alpha_string(matrix[i], "Error! Entered text is not a valid word!\n\n");
    }
    for (int i = 0; i < 5; i++)
        printf("%s\n", matrix[i]);
    return 0;
}

编辑: 不要忘记在顶部添加这些包括:

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>

推荐阅读