我将提示用户输入他们的街道名称(是单个单词)并用空格分隔他们的门牌号码。用户将在提示符下给我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]);
}
}
答案 0 :(得分:1)
C需要二维数组来存储字符串。
#include <stdio.h>
int main (void) {
char street[10][100];
int number[10];
int i;
for (i=0;i<3;i++){
printf("Enter street and number: \n");
scanf("%99s %d", &street[i], &number[i]);
}
for (int i=0;i<3;i++) {
printf("%s ",street[i]);
}
}
或使用指针,您可以使用malloc来分配内存
#include <stdio.h>
int main (void) {
char *street[10];
int number[10];
int i;
for (i=0;i<3;i++){
street[i] = malloc(100);
printf("Enter street and number: \n");
scanf("%99s %d", street[i], &number[i]);
}
for (int i=0;i<3;i++) {
printf("%s ",street[i]);
}
}
答案 1 :(得分:1)
Angela,你的代码中主要犯了 3 错误。
首先要有一个10个元素int number[10];
而不是int *number[10];
的整数数组。这里只需要一维数组。 int *number[10];
用于二维数组。
第二个你不能在没有分配内存的情况下使用字符串指针。因此在使用 malloc street[i] = (char *)malloc(sizeof(char) * 100);
之前应该使用分配代码,然后再读取一些值{{ 1}}。
在c中扫描整数数组时,你必须使用street[i]
运算符。所以&
语句应为scanf
请尝试修改此代码。这样可以: -
scanf("%s%d", street[i], &number[i]);