这里是C语言的初学者。很抱歉这个la脚的问题。我正在编写一个程序,该程序从用户那里获取十个整数,然后将它们添加到数组中。它可以工作,但是由于某种原因,它会提示用户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:
答案 0 :(得分:3)
在第一个循环中出现一个错误,可能导致堆栈损坏:
#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:
答案 1 :(得分:0)
有些不同。输入新数字时,它会更改大小。
#include <stdio.h>
#include <stdlib.h>
typedef struct
{
size_t size;
int array[];
}data_t;
data_t *addNumber(data_t **data, int number)
{
data_t *tmp;
size_t size = 0;
if(*data)
{
size = (*data) -> size;
}
tmp = realloc(*data, (size + 1) * sizeof(int) + sizeof(**data));
if(tmp)
{
*data = tmp;
(*data) -> size = size + 1;
(*data) -> array[size] = number;
}
return tmp;
}
int main()
{
data_t *array = NULL;
char str[500];
while(fgets(str, 500, stdin) != NULL)
{
int number;
if(sscanf(str, "%d", &number) != 1) break;
if(!addNumber(&array, number))
{
printf("Error adding number\n");
}
}
if(array)
{
for(size_t index = 0; index < array -> size; index ++)
{
printf("Index %zu Number: %d\n", index, array -> array[index]);
}
}
}