0

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

1 回答 1

1

您的问题出在以下几行:

int tall;        
char name[40][tall]; 
char seat[40][tall]; 

由于tall未初始化(未给定值),因此不知道您的 40 个数组将变得多大。它可以是介于 0 和一个非常大的数字之间的任何值,或者甚至是“在你的脸上炸毁”,因为这种行为在形式上是未定义的。后面的分配tall不会为您神奇地调整数组的大小。

解决方案是重新排列您的代码,以便在您获得有关其大小的足够信息之前不声明数组。此外,考虑到您如何使用它们,您似乎需要tall40 个字符的数组,而不是 40 个字符的数组tall,因此您需要交换维度:

//...
printf("Enter total number of students: "); 
scanf("%d",&max); 
getchar();        
tall=max+1;       
char name[tall][40]; 
char seat[tall][40]; 
//...
于 2013-04-12T06:20:29.097 回答