从键盘上读取单词并将其放入矩阵

时间:2018-11-11 11:31:51

标签: c

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

这是我的代码,但是我扫描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;
}

1 个答案:

答案 0 :(得分:0)

由于您尚未为字符串指定任何大小...我将假定它们的长度为任意长度 ...

throw

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

// 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;
}