c - 将用户输入存储到两个数组中
问题描述
我将提示用户输入他们的街道名称(是一个单词)并用空格分隔,即他们的门牌号。用户将在提示时给我其中的 10 个。
我要将街道名称放入一个数组中,将门牌号放入另一个数组中。到目前为止,我的代码如下所示。它会导致分段错误。我已经阅读了我所有的笔记,但我仍然不确定为什么会发生这种情况。任何帮助是极大的赞赏。(注意,第二个循环是查看街道数组是否正确存储了它的元素)。
#include <stdio.h>
int main (void){
char *street[10];
int *number[10];
int i;
for (i=0;i<10;i++){
printf("Enter street and number: \n");
scanf(" %s %d", street[i], number[i]);
}
for (int i=0;i<10;i++){
printf("%s ",street[i]);
}
}
解决方案
安吉拉,你的代码主要犯了3 个错误。
首先要有一个 10 个元素的整数数组 int number[10];
不是 int *number[10];
。这里你只需要一个一维数组。int *number[10];
用于二维数组。
其次,您不能在不为此分配内存的情况下使用字符串指针。因此,在将某些 street[i] = (char *)malloc(sizeof(char) * 100);
值读取到street[i]
.
第三,在c中扫描整数数组时,您必须使用&
运算符。所以scanf
语句应该是 scanf("%s%d", street[i], &number[i]);
请尝试此修改后的代码。这将起作用:-
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
char *street[10];
int number[10]; // not *number[10]
int i;
for (i = 0; i < 10; i++)
{
printf("Enter street and number: \n");
street[i] = (char *)malloc(sizeof(char) * 100); // assuming the max-string size is 100
scanf("%s%d", street[i], &number[i]); // not number[i]
getchar(); // for handling un managed '\n' (enter-keys)
}
for (int i = 0; i < 10; i++)
{
printf("%s\n", street[i]);
}
}
推荐阅读
- c++ - 使用带有 std::condition_variable_any 的虚拟假锁是否安全?
- python - SQL 滚动窗口唯一计数
- jquery - 视频悬停 JQuery 条件 - 检查源是否为视频
- xml - 从添加到 TFS 测试用例工作项的自定义字段中打印文本
- amazon-web-services - 与 Amazon Redshift 同步
- java - Java Spring(页面
.Map(新转换器)) - node.js - async await not working with Node.js gdrive API v3
- swagger-codegen - Is it possible to configure the source code file header generated by swagger-codegen?
- c - Finite State Machines in C
- angular-cli - Material Side Nav Generator