#include <stdio.h>
#include <stdlib.h>
int main ()
{
int numbers=0;
printf("Enter the number of data: ");
if (scanf("%d", &numbers) != 1 || numbers <= 0) {
printf("Invalid input or number of data must be greater than 0.\n");
return 1;
}
int *pData=calloc(numbers,sizeof(int)); //ALSO malloc(numbers*sizeof(int))
if(pData==NULL){
printf("MEMORY ALLOCATE FAILED\n PROGRAM EXITED.");
return 1;
}
for(int i=0;i<numbers;i++){
printf("Enter Data No.%d: ",i+1);
scanf("%d",&pData[i]);
//等价于 scanf("%d",*(pData + i)); 所以不要显性的dereference符号*
}
printf("Your Inital Data is:\n");
for(int i=0;i<numbers;i++){
printf("%d ",pData[i]);
}
//Add or delete data
int newnumber=0;
enum CHOICE {ADD=1,DELETE,EXIT} ;
int choice = 0;
printf("\n\nEnter your choice\n1.Add data\n2.Delete data\n3.Exit\n");
printf("Choose: ");
if (scanf("%d", &choice) != 1) {
printf("Invalid choice input\n");
free(pData);
return 1;
}
if(choice == ADD){
printf("Add # data: ");
scanf("%d",&newnumber);
int *temp=realloc(pData,(numbers+newnumber)*sizeof(int));
pData = temp;
for(int i=0;i<newnumber;i++){
printf("Enter Data No.%d: ",i+1+numbers);
scanf("%d",&pData[i+numbers]);
//equivalent: scanf("%d",*(pData + i));
}
numbers += newnumber;
}
else if(choice == DELETE){
printf("Delete last # data: ");
scanf("%d",&newnumber);
int *temp=realloc(pData,(numbers-newnumber)*sizeof(int));
pData = temp;
numbers -= newnumber;
}
else if(choice == EXIT){
printf("PROGRAM EXITED\n");
return 0;
}
//print changed data
printf("Changed data: ");
for(int i=0;i<numbers;i++){
printf("%d ",pData[i]); //dereference is invisible
}
//file print
FILE *pFile=fopen("data.txt","w");
for(int i=0;i<numbers;i++){
fprintf(pFile,"%d ",pData[i]);
}
fclose(pFile);
free(pData);
pData = NULL;
return 0;
}
指针与MALLOC,CALLOC,REALLOC函数
发布于 2025-10-03 47 次阅读

Comments NOTHING