我只是无法理解为什么这一刻没有停止:
int **movePlayer(int playerI,int playerJ,int length,int ***tab)
{
char letter;
int l;
int c =0;
int verif = 0;
int number;
//int c= 0;
while( verif == 0){
//fflush(stdin);
printf("Entrez la lettre correspondante à la colonne sur laquelle vous voulez jouer\n");
scanf(" %c", &letter);
//fflush(stdin);
printf("Entrez le chiffre correspondante à la ligne sur laquelle vous voulez jouer\n");
scanf(" %d", &number);
verif = verifScan(playerI,playerJ,letter,number,tab,length);
printf("%d", verif);
verif = 1;
}
l = (int)letter - 65;
(*tab)[playerI][playerJ] = 'j' ;
(*tab)[number][l] = 'J';
}
我确切地说,verif的最后一个printf返回1,因为我的函数verifScan在这里返回1。
verifScan在这里,当我在我的scanf中写B和0时返回1:
int verifScan(int posI,int posJ,int letter, int number,int ***tab,int length)
{
int l;
if(letter >= 97 && letter <= 97 + length - 1){
l = letter - 97;
//return 1;
} else if(letter >= 65 && letter <= 65 + length - 1){
l = letter - 65;
//return 1;
}else {
return 0;
}
if(number > length - 1 || number < 0){
return 0;
}
if(verifCaseLibre(tab,l,number) == 0){
return 0;
}
if((abs(l - posJ) == 0 && abs(number - posI) == 1) || (abs(l - posJ) == 1 && abs(number - posI) == 0))
{
return 1;
}
return 1;
}
I admet that i have a lots of warning
我可以帮忙吗?谢谢。
答案 0 :(得分:1)
fflush
用于输出流,而不是输入流。使用fflush(stdin)
是不对的。来自http://en.cppreference.com/w/c/io/fflush:
对于输入流(以及输入上一次操作的更新流),行为未定义。
如果你想忽略直到行尾的所有内容,你可以使用:
int c;
while ( (c = getc(stdin)) != '\n' && c != EOF);
我建议把它放在一个函数中并调用函数。
void ignoreLine(FILE* fp)
{
int c;
while ( (c = getc(fp)) != '\n' && c != EOF);
}
然后使用
ignoreLine(stdin);
在"%c"
调用的格式说明符中使用scanf
不会跳过空格。如果要跳过空格,请使用" %c"
。
scanf(" %c", &letter);
您的问题可能源于上述两种情况的结合。
答案 1 :(得分:0)
对不起,问题是我最终调用了两次函数,因此while初始化了两次。谢谢大家的帮助。