无法使用动态内存分配来存储运行时数组
问题描述:
以下是我在编写程序时遇到的一个问题,其中我提示用户输入尽可能多的值,然后打印输入的每个整数的结果。无法使用动态内存分配来存储运行时数组
我被建议在我的最后一个问题How to test my program against an input test case file中使用https://stackoverflow.com/users/319824/gcc的动态memeory分配。
我的代码如下:
#include <stdio.h>
#include <stdlib.h>
struct node
{
int data;
struct node *next;
}*start;
void insertatend(int d)
{
struct node *n;
n=(struct node *)malloc(sizeof(struct node));
n->data=d;
n->next=NULL;
if(start==NULL)
{
start=n;
}
else
{
struct node *tmp;
for(tmp=start;tmp->next!=NULL;tmp=tmp->next);
tmp->next=n;
}
}
int max(int a,int b)
{
int c=(a>b)?a:b;
return c;
}
int maxCoins(int n)
{
int arr[n+1],i;
arr[0]=0;
arr[1]=1;
arr[2]=2;
arr[3]=3;
if(n>2)
{
for(i=3;i<=n;i++)
{
int k= arr[(int)(i/2)]+arr[(int)(i/3)]+arr[(int)(i/4)];
arr[i]=max(i,k);
}
}
return arr[n];
}
int main(void)
{
int coins,i;
start=NULL;
struct node*p;
while(scanf("%d",&coins))
{
insertatend(coins);
}
for(p=start;p!=NULL;p=p->next)
{
printf("%d\n",p->data);
}
getchar();
return 0;
}
该程序成功运行。我可以提供任意数量的输入,如果我按CTRL + Z试图突破,程序不会响应。我不能使用动态内存分配来解决这些问题吗?如果是的话,我在哪里错了?
答
while(scanf("%d",&coins))
如果您发送CTRL + Z到你的程序,scanf
返回EOF
,这是一个负数,而不是0,所以contition计算为true,你在无限循环是。测试
while(scanf("%d",&coins) > 0)
+0
是...我明白了。非常感谢 – OneMoreError 2012-07-18 09:38:54
您的意思是CTRL + C或CTRL + Z? – Rohan 2012-07-18 09:35:59
CTRL + Z在Windows上结束输入,并将进程置于Linux上的后台。每当我在两者之间切换时,我都会发现我的成本。 – 2012-07-18 09:36:44
@SteveJessop Windows在CTRL + D上做了什么? – 2012-07-18 09:42:05