【发布时间】:2020-07-20 11:49:25
【问题描述】:
这个 C 程序应该根据用户输入的元素数量分配内存,然后添加它们并打印结果。它再次提示用户是否要添加更多数字。但是在输入 Y/N 时,控制台关闭并且程序意外结束。如何解决?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
int n,i;
int *ptr,*old_ptr;
int sum = 0;
char a;
printf("Enter the number of elements to be added: ");
scanf("%d",&n);
ptr = calloc(n,sizeof(int));
ptr = old_ptr;
printf("Enter the elements:\n");
for(i = 0;i < n;i++){
scanf("%d",ptr);
sum = sum + *ptr;
ptr++;
}
printf("The sum total of the numbers is: %d\n\n\n",sum);
printf("Do you want to enter more numbers ?\nPress Y/N: ");
scanf("%c",&a);
if(a == 'Y'){
printf("\n\nYou have entered: %c\n\n",a);
ptr = realloc(old_ptr,sizeof(int)*n);
printf("Enter the elements:\n");
for(i = 0;i < n;i++){
scanf("%d",&ptr);
sum = sum + *ptr;
ptr++;
}
printf("The total of the numbers is: %d\n\n\n",sum);
}
if(a == 'N'){
printf("Program finished!");
}
return 0;
}
【问题讨论】:
-
这是什么 ptr = calloc(n,sizeof(int)); ptr = old_ptr;什么意思?!
-
也许你的意思是
old_ptr = ptr;?但是根本不需要分配数组。您可以每次都读入相同的int变量并将其添加到sum,因为您实际上并没有真正使用该数组。 -
我相信(不是专家)您需要使用 scanf 格式字符串
" %s"(注意空格),这样它就会忽略空格和换行符。 -
@VladfromMoscow 感谢您的回复。我为指针分配了一些内存,然后在提示后的第二次尝试和从用户那里获得输入后,我重新分配了内存。
-
@kaylum 感谢您的回复。不,这也不起作用。
标签: c memory-management crash scanf