我是编程新手,过去几个月我一直在学习C语言。
我正在研究一个在数组中存储整数对的程序。程序提示用户输入要输入的对数,然后我需要为数组分配存储,然后用户逐行输入对以存储在数组中。程序需要访问这些对以便稍后执行操作。
我无法尝试设置它。如何创建这种数据集,其中每个成员包含一对整数,而不知道数组的初始大小?
答案 0 :(得分:1)
C中没有对动态数组的内置支持。您需要的类型是指向您的对的指针,这些指针将根据用户选择进行分配。
我已经从您的描述中编写了一个简单的示例代码,以帮助您理解动态分配。
#include <stdio.h>
#include <stdlib.h>
struct MyPair
{
int first;
int second;
};
int main()
{
int nPairCount=0;
struct MyPair *pPairs = NULL;
// .... prompt from the user
// let's say we have a nPairCount>0
// We allocate a memory space in the heap that will be able to store
// nPairCount pairs contiguously.
pPairs = malloc(nPairCount*sizeof(struct MyPair));
if(pPairs == NULL)
{
// LOG ERROR, THERE IS NOT ENOUGH MEMORY TO ALLOCATE YOUR PAIRS
return -1;
}
for(int i= 0; i<nPairCount; ++i)
{
// you can access the i-th pair in memory thanks to [] operator
// Fill the currentPair
// pPairs[i].first = ... ;
// pPairs[i].second= ... ;
}
// Do your process
// Do not forget to free your pairs from memory
free(pPairs);
return 0;
}
答案 1 :(得分:0)
我认为c中没有可用的存储桶功能。但是您可以创建一个具有用户输入的元素数量的数组。
#include<stdio.h>
int main(){
int a,i;
printf("Enter the number of pairs: ");
scanf("%d",&a);
double b[a*2];\\note that a is number of pairs, so 2a will make it elements
printf("Enter the numbers: \n");
for(i=0;i<(2*a-1);i=i+2)
{
scanf("%lf %lf",&b[i],&b[i+1]);
}
printf("The pairs entered by you are:\n ");
for(i=0;i<(2*a-1);i=i+2)
{
printf("%lf and %lf\n ",b[i],b[i+1]);
}
return 0;
}
我所做的就是一次占用2个元素并为它们分配连续的数组,然后成对打印它们。
示例输出: 输入对数:3
输入数字:
12 14
45 456
321 568
您输入的对是:
12.000000和14.000000
45.000000和456.000000
321.000000和568.000000