嗨,我正在尝试让我的 C 控制台程序在不同颜色之间闪烁,以向用户表示警告。但是每次我启动程序时,下一个 fgets 都会使整个程序崩溃。
char vitesseOverdrive[5];
int vitesse = 0;
system("cls");
printf("\n\n------------------------- Warning ! ------------------------\n");
for (i=0;i<5;i++)
{
system("color 0c");
Sleep(300);
system("color 0a");
Sleep(300);
}
vitesse = SaisieNombre(vitesseOverdrive,sizeof(vitesseOverdrive)/sizeof(char));
什么可能导致程序崩溃?有没有更好的方法或者可以绕过它?
信息:只要我将这些行放在评论中,程序就可以正常工作
谢谢 !
编辑:这里是 fgets() 函数
int SaisieNombre(char *chaine,int a)
{
int i;
int j;
int nombre = 0;
int work = 0;
int marche = 0;
int reussi = 0;
char *endptr = NULL;
char *place = NULL;
do
{
work = 0;
reussi = 1;
marche = 1;
for (i=0;i<a;i++)
{
chaine[i] = 0;
}
if (fgets(chaine,a,stdin) != NULL)
{
if (strchr(chaine,'\n') != NULL)
{
place = strchr(chaine,'\n');
*place = '\0';
for (j=0;j<a;j++)
{
if (isdigit(chaine[j]) != 0 || chaine[j] == '\0' )
{
}
else
{
reussi = 0;
}
}
}
else
{
printf("\nLe nombre est trop long\n");
printf("\nVeuillez entrer un nombre : ");
marche = 0;
viderBuffer();
}
}
else
{
viderBuffer();
Sleep(2000);
exit(0);
}
if (reussi != 1)
{
printf("\nLa donnee n'est pas un nombre\n\n");
printf("Veuillez entrer un nombre : ");
}
nombre = strtol(chaine,&endptr,10);
if (*endptr == '\0')
{
work = 1;
}
else
{
work = 0;
}
}while (work != 1 || reussi != 1 || marche != 1);
return nombre;
}