首页 > 解决方案 > 将用户输入添加到数组 (C)

问题描述

这里是 C 初学者。对不起这个蹩脚的问题。我编写了一个程序,它从用户那里获取十个整数,然后将它们添加到一个数组中。它可以工作,但由于某种原因,它会提示用户 13 次输入整数,并且在第二个提示中不包括“请输入整数:”部分。否则它仍然会创建数组并保存前十个数字。我只是无法让它停止要求整数 13 次。

int main () {

    FILE fp*
    int *arr = (int*) malloc (sizeof(int)*10);

    for(int i=0;i<=10;i++)
    {
            printf("Enter an integer:");
            scanf("%d", &arr[i]);
    }
    for (int i=0; i<11; i++)
    {
            printf("arr[%d] = %d: \n", 10-i-1, arr[10-i-1]);
    }
 return 0;
}

这是它当前的运行方式:

输入一个整数:1

输入一个整数:2

输入一个整数:3

输入一个整数:4

输入一个整数:5

输入一个整数:6

输入一个整数:7

输入一个整数:8

输入一个整数:9

输入一个整数:10

输入一个整数:11

输入一个整数:12

arr[9] = 10:

arr[8] = 9:

arr[7] = 8:

arr[6] = 7:

arr[5] = 6:

arr[4] = 5:

arr[3] = 4:

arr[2] = 3:

arr[1] = 2:

arr[0] = 1:

标签: c

解决方案


在您的第一个循环中出现一个错误,可能导致堆栈损坏:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

#define ARRAY_LENGTH 10

int main(int argc, char *argv[]) {
    int *arr = (int*) malloc (sizeof(int) * ARRAY_LENGTH);

    for(int i = 0; i < ARRAY_LENGTH; i++)
    {
        printf("Enter an integer %d:", i);
        scanf("%d", &arr[i]);
    }
    for (int i = ARRAY_LENGTH-1; i >= 0; i--)
    {
        printf("arr[%d] = %d: \n", i, arr[i]);
    }

    return(0);
}

输出:

$ gcc -Wall -o dummy dummy.c
$ ./dummy
Enter an integer 0:1
Enter an integer 1:2
Enter an integer 2:3
Enter an integer 3:4
Enter an integer 4:5
Enter an integer 5:6
Enter an integer 6:7
Enter an integer 7:8
Enter an integer 8:9
Enter an integer 9:10
arr[9] = 10:
arr[8] = 9:
arr[7] = 8:
arr[6] = 7:
arr[5] = 6:
arr[4] = 5:
arr[3] = 4:
arr[2] = 3:
arr[1] = 2:
arr[0] = 1:

推荐阅读