关于c的goto与输入

来源:百度知道 编辑:UC知道 时间:2024/09/22 04:20:00
#include<stdio.h>
int main()
{
char t;
int a,b,c;
printf("Please enter s:\n");
r1: t=getchar();
if (t=='s')
{

printf("Please enter a,b,c:\n");
scanf("%d%d%d",&a,&b,&c);
printf("a=%f,b=%d,c=%d",&a,&b,&c);
}
else
{
printf("Please enter s:\n");
goto r1;
}
return 0;
}

当输入不是s的时候,程序会出现两个Please enter s:
我只想要一个。如果goto前面那一句删去就没有了。
恳请各位大侠帮助,小弟在此有礼了。
执行结果是这样的:
Please Enter s:
f
Please Enter s:
Please Enter s:

我想要的结果是:
Please Enter s:
f
Please Enter s:

研究数日,终于找到了解决办法
将getchar一句改为scanf("%s",t)就可以了

分析原因应该是那个回车的问题。

再次感谢帮助我的大侠们

第一次getchar()读走了你输入的字符,第二次读走了你第一次输入的回车,因为第一次你输入的回车留在缓冲区没有被读走,所以应该这样读走回车。
#include<stdio.h>
int main()
{
char t;
int a,b,c;
printf("Please enter s:\n");
r1: t=getchar();
getchar(); /*读走回车*/
if (t=='s')
{

printf("Please enter a,b,c:\n");
scanf("%d%d%d",&a,&b,&c);
printf("a=%f,b=%d,c=%d",&a,&b,&c);
}
else
{
printf("Please enter s:\n");
goto r1;
}
return 0;
}

#include<stdio.h>
int main()
{
char t;
int a,b,c;
r1: printf("Please enter s:\n");
t=getchar();
if (t=='s')
{
printf("Please enter a,b,c:\n");
scanf("%d%d%d",&a,&b,&c);
printf("a=%f,b=%d,c=%d",&a,&b,&c);
}
else
{
goto r1;
}
return 0;
}

你应该是想要这个当输入S时打印