我遇到了麻烦。我的程序似乎在DEV C ++上工作正常,但在Xcode上,最后一个For循环不知道何时停止。有什么帮助吗?
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#include <string.h>
void strip_newline(char *str,int size)
{
int i;
for(i=0;i<size;++i)
{
if(str[i]=='\n')
{
str[i]='\0';
return;
}
}
}
int main()
{
int randomnumber;
int max;
int tall;
char name[40][tall];
char seat[40][tall];
int count;
int currentcount;
int flag;
srand( time(NULL) );
printf("Enter total number of students: ");
scanf("%d",&max);
getchar();
tall=max+1;
randomnumber=rand()% max +1;
printf("This is your random number\n %d \n",randomnumber);
printf("Enter your students names and press enter after each name:\n ");
fgets(name[0],40,stdin);
strip_newline(name[0],40);
for(count=1; count < max; count++ )
{
printf("Please enter next name\n ");
fgets(name[count],40,stdin);
strip_newline(name[count],40);
}
count=-1;
do {
randomnumber=rand()% max;
flag=0;
for(currentcount=0; currentcount<max; currentcount++)
{
if(strcmp(name[randomnumber],seat[currentcount])==0)
{
flag=1;
}
else
{
}
}
if(flag==0)
{
strcpy(seat[count],name[randomnumber]);
count++;
}
else
{
}
}
while (count != max);
for(count=0; count < max; count++)
{
printf("%s sits in seat %d\n",seat[count],count+1);
}
getchar();
return 0;
}
答案 0 :(得分:1)
你的问题在于以下几点:
int tall;
char name[40][tall];
char seat[40][tall];
由于tall
未初始化(未给定值),因此不知道您的40个阵列将变得多大。它可能是介于0和非常大的数字之间的任何东西,甚至可能是“爆炸性的”,因为行为是正式未定义的。稍后对tall
的分配不会为您神奇地调整数组的大小。
解决方案是重新安排您的代码,以便在您有足够的有关其大小的信息之前不会声明数组。另外,考虑到如何使用它们,您似乎需要40个字符的tall
数组,而不是40个tall
字符数组,因此您需要交换尺寸:
//...
printf("Enter total number of students: ");
scanf("%d",&max);
getchar();
tall=max+1;
char name[tall][40];
char seat[tall][40];
//...