为什么循环后有一个换行符
why after looping there's a newline
所以我正在努力成为一名点球得分手。
我一开始设置为5轮,当比分打平后,再重复5轮。问题是它后面似乎有一个换行符。
#include <stdio.h>
int main()
{
int penalty2=0,penalty1=0,i=0;
char home[15]="HOME",away[15]="AWAY";
printf("\nSTARTS PENALTY SHOOTOUT\n\n\t\t%s\t\t VS\t\t %s\n\n",home,away);
do{
char penal1=' ',penal2=' ',penal3=' ',penal4=' ',penal5=' ',penal6=' ',penal7=' ',penal8=' ',penal9=' ',penal10=' ';
for(i=1;i<=10;++i)
{
printf("\nEnter X for MISS and O for GOAL\n\n:>>");
if(i==1)
{
scanf("%c",&penal1);
printf("\n\n%-15s\t\t %c %c %c %c %c \n-------------------------------------\n%-15s\t\t %c %c %c %c %c \n\n",home,penal1,penal2,penal3,penal4,penal5,away,penal6,penal7,penal8,penal9,penal10);
if (penal1=='O'||penal1=='o')
{
++penalty1;
}
}
else if(i==2)
{
scanf(" %c",&penal6);
printf("\n\n%-15s\t\t %c %c %c %c %c \n-------------------------------------\n%-15s\t\t %c %c %c %c %c \n\n",home,penal1,penal2,penal3,penal4,penal5,away,penal6,penal7,penal8,penal9,penal10);
if (penal6=='O'||penal6=='o')
{
++penalty2;
}
}
else if(i==3)
{
scanf(" %c",&penal2);
printf("\n\n%-15s\t\t %c %c %c %c %c \n-------------------------------------\n%-15s\t\t %c %c %c %c %c \n\n",home,penal1,penal2,penal3,penal4,penal5,away,penal6,penal7,penal8,penal9,penal10);
if (penal2=='O'||penal2=='o')
{
++penalty1;
}
}
else if(i==4)
{
scanf(" %c",&penal7);
printf("\n\n%-15s\t\t %c %c %c %c %c \n-------------------------------------\n%-15s\t\t %c %c %c %c %c \n\n",home,penal1,penal2,penal3,penal4,penal5,away,penal6,penal7,penal8,penal9,penal10);
if (penal7=='O'||penal7=='o')
{
++penalty2;
}
}
else if(i==5)
{
scanf(" %c",&penal3);
printf("\n\n%-15s\t\t %c %c %c %c %c \n-------------------------------------\n%-15s\t\t %c %c %c %c %c \n\n",home,penal1,penal2,penal3,penal4,penal5,away,penal6,penal7,penal8,penal9,penal10);
if (penal3=='O'||penal3=='o')
{
++penalty1;
}
}
else if(i==6)
{
scanf(" %c",&penal8);
printf("\n\n%-15s\t\t %c %c %c %c %c \n-------------------------------------\n%-15s\t\t %c %c %c %c %c \n\n",home,penal1,penal2,penal3,penal4,penal5,away,penal6,penal7,penal8,penal9,penal10);
if (penal8=='O'||penal8=='o')
{
++penalty2;
}
}
else if(i==7)
{
scanf(" %c",&penal4);
printf("\n\n%-15s\t\t %c %c %c %c %c \n-------------------------------------\n%-15s\t\t %c %c %c %c %c \n\n",home,penal1,penal2,penal3,penal4,penal5,away,penal6,penal7,penal8,penal9,penal10);
if (penal4=='O'||penal4=='o')
{
++penalty1;
}
}
else if(i==8)
{
scanf(" %c",&penal9);
printf("\n\n%-15s\t\t %c %c %c %c %c \n-------------------------------------\n%-15s\t\t %c %c %c %c %c \n\n",home,penal1,penal2,penal3,penal4,penal5,away,penal6,penal7,penal8,penal9,penal10);
if (penal9=='O'||penal9=='o')
{
++penalty2;
}
}
else if(i==9)
{
scanf(" %c",&penal5);
printf("\n\n%-15s\t\t %c %c %c %c %c \n-------------------------------------\n%-15s\t\t %c %c %c %c %c \n\n",home,penal1,penal2,penal3,penal4,penal5,away,penal6,penal7,penal8,penal9,penal10);
if (penal5=='O'||penal5=='o')
{
++penalty1;
}
}
else if(i==10)
{
scanf(" %c",&penal10);
printf("\n\n%-15s\t\t %c %c %c %c %c \n-------------------------------------\n%-15s\t\t %c %c %c %c %c \n\n",home,penal1,penal2,penal3,penal4,penal5,away,penal6,penal7,penal8,penal9,penal10);
if (penal10=='O'||penal10=='o')
{
++penalty2;
}
}
}
}
while (penalty1 == penalty2);
printf("END OF PENALTY KICK\n\n\t\t%s\t\t VS\t\t %s\n\n\t\t %d\t\t\t\t %d",home,away,penalty1,penalty2);
return 0;
}
示例屏幕截图:http://s18.postimg.org/eobqwmd6h/masalah_programming.png
(这里不能直接上传,还是声望不够)
在循环的第 2 次,scanf("%c",&penal1);
扫描上一个用户输入的 '\n'
。添加一个前面的 space 就像其他地方使用的代码一样,以消耗所有前面的 white-space.
scanf(" %c",&penal1); // added space.
代码不仅要检查 'O'
和 'o'
,还要检查 'X'
和 'x'
以确保没有发生其他输入。
所以我正在努力成为一名点球得分手。 我一开始设置为5轮,当比分打平后,再重复5轮。问题是它后面似乎有一个换行符。
#include <stdio.h>
int main()
{
int penalty2=0,penalty1=0,i=0;
char home[15]="HOME",away[15]="AWAY";
printf("\nSTARTS PENALTY SHOOTOUT\n\n\t\t%s\t\t VS\t\t %s\n\n",home,away);
do{
char penal1=' ',penal2=' ',penal3=' ',penal4=' ',penal5=' ',penal6=' ',penal7=' ',penal8=' ',penal9=' ',penal10=' ';
for(i=1;i<=10;++i)
{
printf("\nEnter X for MISS and O for GOAL\n\n:>>");
if(i==1)
{
scanf("%c",&penal1);
printf("\n\n%-15s\t\t %c %c %c %c %c \n-------------------------------------\n%-15s\t\t %c %c %c %c %c \n\n",home,penal1,penal2,penal3,penal4,penal5,away,penal6,penal7,penal8,penal9,penal10);
if (penal1=='O'||penal1=='o')
{
++penalty1;
}
}
else if(i==2)
{
scanf(" %c",&penal6);
printf("\n\n%-15s\t\t %c %c %c %c %c \n-------------------------------------\n%-15s\t\t %c %c %c %c %c \n\n",home,penal1,penal2,penal3,penal4,penal5,away,penal6,penal7,penal8,penal9,penal10);
if (penal6=='O'||penal6=='o')
{
++penalty2;
}
}
else if(i==3)
{
scanf(" %c",&penal2);
printf("\n\n%-15s\t\t %c %c %c %c %c \n-------------------------------------\n%-15s\t\t %c %c %c %c %c \n\n",home,penal1,penal2,penal3,penal4,penal5,away,penal6,penal7,penal8,penal9,penal10);
if (penal2=='O'||penal2=='o')
{
++penalty1;
}
}
else if(i==4)
{
scanf(" %c",&penal7);
printf("\n\n%-15s\t\t %c %c %c %c %c \n-------------------------------------\n%-15s\t\t %c %c %c %c %c \n\n",home,penal1,penal2,penal3,penal4,penal5,away,penal6,penal7,penal8,penal9,penal10);
if (penal7=='O'||penal7=='o')
{
++penalty2;
}
}
else if(i==5)
{
scanf(" %c",&penal3);
printf("\n\n%-15s\t\t %c %c %c %c %c \n-------------------------------------\n%-15s\t\t %c %c %c %c %c \n\n",home,penal1,penal2,penal3,penal4,penal5,away,penal6,penal7,penal8,penal9,penal10);
if (penal3=='O'||penal3=='o')
{
++penalty1;
}
}
else if(i==6)
{
scanf(" %c",&penal8);
printf("\n\n%-15s\t\t %c %c %c %c %c \n-------------------------------------\n%-15s\t\t %c %c %c %c %c \n\n",home,penal1,penal2,penal3,penal4,penal5,away,penal6,penal7,penal8,penal9,penal10);
if (penal8=='O'||penal8=='o')
{
++penalty2;
}
}
else if(i==7)
{
scanf(" %c",&penal4);
printf("\n\n%-15s\t\t %c %c %c %c %c \n-------------------------------------\n%-15s\t\t %c %c %c %c %c \n\n",home,penal1,penal2,penal3,penal4,penal5,away,penal6,penal7,penal8,penal9,penal10);
if (penal4=='O'||penal4=='o')
{
++penalty1;
}
}
else if(i==8)
{
scanf(" %c",&penal9);
printf("\n\n%-15s\t\t %c %c %c %c %c \n-------------------------------------\n%-15s\t\t %c %c %c %c %c \n\n",home,penal1,penal2,penal3,penal4,penal5,away,penal6,penal7,penal8,penal9,penal10);
if (penal9=='O'||penal9=='o')
{
++penalty2;
}
}
else if(i==9)
{
scanf(" %c",&penal5);
printf("\n\n%-15s\t\t %c %c %c %c %c \n-------------------------------------\n%-15s\t\t %c %c %c %c %c \n\n",home,penal1,penal2,penal3,penal4,penal5,away,penal6,penal7,penal8,penal9,penal10);
if (penal5=='O'||penal5=='o')
{
++penalty1;
}
}
else if(i==10)
{
scanf(" %c",&penal10);
printf("\n\n%-15s\t\t %c %c %c %c %c \n-------------------------------------\n%-15s\t\t %c %c %c %c %c \n\n",home,penal1,penal2,penal3,penal4,penal5,away,penal6,penal7,penal8,penal9,penal10);
if (penal10=='O'||penal10=='o')
{
++penalty2;
}
}
}
}
while (penalty1 == penalty2);
printf("END OF PENALTY KICK\n\n\t\t%s\t\t VS\t\t %s\n\n\t\t %d\t\t\t\t %d",home,away,penalty1,penalty2);
return 0;
}
示例屏幕截图:http://s18.postimg.org/eobqwmd6h/masalah_programming.png
(这里不能直接上传,还是声望不够)
在循环的第 2 次,scanf("%c",&penal1);
扫描上一个用户输入的 '\n'
。添加一个前面的 space 就像其他地方使用的代码一样,以消耗所有前面的 white-space.
scanf(" %c",&penal1); // added space.
代码不仅要检查 'O'
和 'o'
,还要检查 'X'
和 'x'
以确保没有发生其他输入。