将用户输入添加到数组(C)
这里是C的初学者。对不起,我问了个蹩脚的问题。我正在编写一个程序,从用户那里获取十个整数,然后将它们添加到一个数组中。它可以工作,但由于某些原因,它会提示用户输入13次整数,并且在第二次提示中不包括“请输入整数:部分”。否则它仍然会创建数组并保存前十个数字。我就是不能让它停止13次求整数将用户输入添加到数组(C),c,C,这里是C的初学者。对不起,我问了个蹩脚的问题。我正在编写一个程序,从用户那里获取十个整数,然后将它们添加到一个数组中。它可以工作,但由于某些原因,它会提示用户输入13次整数,并且在第二次提示中不包括“请输入整数:部分”。否则它仍然会创建数组并保存前十个数字。我就是不能让它停止13次求整数 int main () { FILE fp* int *arr = (int*) malloc (sizeof(int)*10); for(int i=0;i<=10;i++)
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:
第一个循环中一个接一个的错误,可能导致堆栈损坏: 包括 包括 包括 定义数组长度10 int main argc,char*argv[]{ int*arr=int*malloc sizeofint*数组长度; forint i=0;i
有点不同。当您输入新数字时,它会更改大小
#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]);
}
}
}
如果为10个整数指定malloc空间,则有效索引为0到9。所以for循环应该是i=0;i<10;如果你想向后遍历数组,那么它是为i=9;i>=0;i-还可以使第二个循环从int i=ARRAY_LENGTH-1的相反方向迭代;i>=0;i-{printfarr[%d]=%d:,i,arr[i];}dooohh,你当然是绝对正确的。更新了我的答案。