首页 > 解决方案 > 将键盘中的单词读入 C 2D 数组

问题描述

在没有运气的情况下谷歌搜索了 2 个小时后,我需要一些帮助。(也许我只是错误地提出了我的问题?)

我需要从键盘上读取 10 个单词,如果最后 9 个单词中的任何一个大于第一个单词,则显示警告。

我知道如何使用 strlen 来确定请求的最后一部分,但我不知道如何做第一个。

我的代码如下所示:

const int ARRAY_SIZE = 10;
const int MAX_WORD_SIZE = 101;

int main() {
    char arr[ARRAY_SIZE][MAX_WORD_SIZE];

    for (int i = 0; i < ARRAY_SIZE; ++i) {
        for (int j = 0; j < MAX_WORD_SIZE; ++j) {
            printf("Add word %d:\n", i+1);
            scanf("%s", arr[i][j]);
        }
    }

    return 0;
}

但它不起作用。cLion 告诉我“格式指定类型 'char *' 但参数的类型为 'int'”。我真的不明白为什么这不起作用。

标签: c

解决方案


"%s"期望一个内存地址到它应该开始保存字符串的位置。

你有一个二维数组arr[ARRAY_SIZE][MAX_WORD_SIZE];。当您使用[]一次时,您会得到一个一维数组,这是%s预期的。

但是由于您使用[]了两次,因此您将获得该数组类型的单个元素,即 char。

将您的 scanf 更改为:scanf("%s", arr[i]);以解决该问题。

注意到这一点后,您可以摆脱内部 for 循环和 variable j

for (int i = 0; i < ARRAY_SIZE; ++i) {
            printf("Add word %d:\n", i+1);
            scanf("%s", arr[i]);
}

推荐阅读