【问题标题】:Storing users input into two arrays将用户输入存储到两个数组中
【发布时间】:2018-05-23 13:32:29
【问题描述】:

我将提示用户输入他们的街道名称(一个单词)并用空格隔开,即他们的门牌号。用户将在提示时给我其中的 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]);

    }
}

【问题讨论】:

    标签: c arrays string loops for-loop


    【解决方案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]);
        }
    }
    

    【讨论】:

      【解决方案2】:

      Angela,你的代码主要犯了 3 个错误。

      首先拥有一个由 10 个元素组成的整数数组 int number[10]; 而不是 int *number[10]; 。这里你只需要一个一维数组。 int *number[10]; 用于二维数组。

      其次你不能使用字符串指针而不为此分配内存。所以在读取一些值到street[i]之前应该使用使用mallocstreet[i] = (char *)malloc(sizeof(char) * 100);的分配代码。

      第三,在c中扫描整数数组时,你必须使用&amp;操作符。所以scanf语句应该是scanf("%s%d", street[i], &amp;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]);
          }
      }
      

      【讨论】:

        猜你喜欢
        • 2018-11-01
        • 2018-03-22
        • 1970-01-01
        • 1970-01-01
        • 2015-05-03
        • 1970-01-01
        • 1970-01-01
        • 2016-10-22
        • 1970-01-01
        相关资源
        最近更新 更多