c - 将键盘中的单词读入 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'”。我真的不明白为什么这不起作用。
解决方案
"%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]);
}
推荐阅读
- flutter - 如何在颤动中拉动刷新网页视图?带刷新指示器
- r - 删除单个字符而不更改 r 数据框中的数字
- python - 如何使用 pathlib 处理以 ~ 开头的路径?
- typescript - Typescript 接口上的类型推断
- javascript - Context.provider 用它包装我的应用程序组件时抛出错误
- rust - 使用 Rust 宏简化“匹配”
- java - 使用firebase时如何检查特定文档中是否存在字段?
- css - 文本没有换行到下一行 - 特别是在 IE 中
- javascript - 为什么 Uncaught TypeError: Cannot set property 'innerHTML' of null 显示即使 id 在和 js 中相同?
- python - 无法保存包含 DNNRegressor 估计器的 tensorflow 模型