求助c语言:如何输入第一行有一个整数n(1<n<=100)其后n行每行有一个整数,取值为15到25

2025-02-25 23:28:17
推荐回答(1个)
回答1:

#include

#include

#include

#define STRLEN 100

void ifree(char**p,int i);

int CheckAndChange(char*p);

int main()

{

int T;/*样例个数*/

int i;/*循环参数*/

char**p=NULL;/*指针p指向的内存空间存放指向各个字符串的指针*/

scanf("%d\n",&T);/*读取T*/

if((p=malloc(T*sizeof(char*)))==NULL)

{

printf("malloc p fail!\n");

return-1;

}

for(i=0;i<T;i++)

{

if((*(p+i)=malloc((STRLEN+1)*sizeof(char)))==NULL)

{

printf("malloc p+%d fail!\n",i);

ifree(p,i);/*释放之前分配的空间*/

free(p);/*释放p*/

return-1;

}

gets(*(p+i));

}

for(i=0;i<T;i++)

{

if(CheckAndChange(*(p+i))>0)/*判断是否都是大写字符,如果是,则变成小写*/

{

printf("%s\n",*(p+i));

}

else

{

printf("string%d contains incorrect character!\n",i+1);

}

}

ifree(p,T);

free(p);

return 0;

}

void ifree(char**p,int i)

{

int j;

for(j=0;j<i;j++)

{

free(*(p+j));

}

}

int CheckAndChange(char p)

{

int i;

for(i=0;i<strlen(p);i++)

{

if(((p+i)>='A')&&(*(p+i)<='Z'))

{

*(p+i)+='a'-'A';

}

else

{

return-1;

}

}

return 1;

}