求助
#include <stdio.h>#include <stdlib.h>
#define MAX 1024
int main()
{
int i, num = 4;
//scanf("%d", &num);
char *pnames;
char str;
for(i = 0; i < num; i++)
{
//printf("我已经进入“输入相关队伍名称”的第%d次循环啦\n", i + 1);
printf("请输入第%d个队伍的名称:", i + 1);
fgets(str, MAX, stdin);
pnames = str;
//printf("num = %d, i = %d\n", num, i);
if(i == num - 1)
{
printf("队伍名称已录入完毕,正在计算比赛安排...\n");
}
}
for(i = 0; i < num; i++)
{
printf("第%d个队伍的名称为:%s\n", i, pnames);
}
return 0;
}
问题一:为什么num用scanf函数输入的时候,第一个for循环 i=0 的时候fgets函数不执行?
问题二:为什么这样执行下来pnames这个数组里每一个字符串都是上面for循环的第四次循环时fgets输入的内容? #include <stdio.h>
#include <stdlib.h>
#define MAX 1024
int main()
{
int i, num;
scanf("%d", &num);
while(getchar()!='\n'); // 清空键盘缓冲区。(scanf获取%d在键盘缓冲区中会残留 回车 '\n')
char *pnames; // 指针数组:数组里面存放的是指针
char *str;// char str; 改为手动申请
for(i = 0; i < num; i++)
{
printf("请输入第%d个队伍的名称:", i + 1);
str = malloc(sizeof(char)*MAX); // 手动申请内存
fgets(str, MAX, stdin); // str数组只有1个,在你这例中不现实,后面的内容会覆盖前面的。解决办法,手动申请内存,手动释放。
pnames = str; // 把str的地址存入pnames中。
if(i == num - 1)
{
printf("队伍名称已录入完毕,正在计算比赛安排...\n");
}
}
for(i = 0; i < num; i++)
{
printf("第%d个队伍的名称为:%s\n", i, pnames);
}
// 手动释放内存
for(i = 0; i < num; i++)
{
free(pnames); // 把指针数组中地址指向的空间释放
}
return 0;
}
页:
[1]