猿问

如下代码,求助关于c的goto与输入的问题

#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)就可以了

分析原因应该是那个回车的问题。
再次感谢帮助我的大侠们

侃侃无极
浏览 141回答 3
3回答

Cats萌萌

第一次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;}&nbsp;

RISEBY

#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;}

牧羊人nacy

你应该是想要这个当输入S时打印:Please enter a,b,c:输入1 个数字时输出一行,2个数字时输出二行,3个......按你输入的字长打出相应的行数。===================================================#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{if (t!=10){ printf("Please enter s:\n"); }goto r1;}return 0;}&nbsp;
随时随地看视频慕课网APP
我要回答