对于编译器的循环问题

时间:2013-04-11 23:06:17

标签: c xcode

我遇到了麻烦。我的程序似乎在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; 
}

1 个答案:

答案 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]; 
//...