c语言问题:怎么让用户做选择?

下面是我做的等比数列求和的代码,我想让用户在tryagain的时候做出选择(Y/N),但是程序运行时并没有让用户做选择,也没有循环,而是直接到了getch()这一步。请问... 下面是我做的等比数列求和的代码,我想让用户在try again的时候做出选择(Y/N),但是程序运行时并没有让用户做选择,也没有循环,而是直接到了getch()这一步。
请问各位大神,是哪里出错了呢?

#include "stdio.h"
main()
{
long a[31],sum;
int i,q,t;
char x;
loop:sum=0;
printf("Please enter the first term:");
scanf("%d",&a[1]);
printf("Please enter the common ratio:");
scanf("%d",&q);
printf("Please enter the number of terms(<=30):");
scanf("%d",&t);
for(i=1;i<=t;i++)
{
a[i+1]=a[i]*q;
printf("%ld\t",a[i]);
sum=sum+a[i];
}
printf("\nsum=%ld\n\n",sum);
printf("\nTry again?(Y/N):");
scanf("%c",&x);
if(x=='y'||x=='Y')
goto loop;
else
getch();
return 0;
}
展开
 我来答
yiqiu2324
2012-12-09 · TA获得超过633个赞
知道小有建树答主
回答量:117
采纳率:100%
帮助的人:90.2万
展开全部
这个错误我也遇见过:(你调试下就能看出来)
在 scanf("%c",&x);上面加上
getchar();
也就是
getchar();
scanf("%c",&x);
因为在上面输入数据的时候,你敲入的有回车,如果不加getchar(),不把上面的回车接收掉
那么x就会被赋值为ASCII码为10的字符(换行)
额,还有最好不要用 跳转 打破了程序的顺序结构.
最后getch()
可以用:
system("pause");//请按任意键结束

exit(0)//退出程序 不过要加头文件#include<cstdlib>
最后啰嗦下:
①既然求等差数列前n项和,直接用公式n*a1+n*(n-1)/2 *d
②这个c/c++实验系统别用了,太蛋疼了,不能调试,用VC++6.0/DEV C++都可以
xoaxa
2012-12-09 · TA获得超过8613个赞
知道大有可为答主
回答量:6415
采纳率:72%
帮助的人:3521万
展开全部
/*
Please enter the first term : 1
Please enter the common ratio : 2
Please enter the number of terms(<=30) : 5
1 2 4 8 16
sum = 31

Try again?(Y/N) : y
Please enter the first term : 1
Please enter the common ratio : 2
Please enter the number of terms(<=30) : 13
1 2 4 8 16 32 64 128 256 512
1024 2048 4096
sum = 8191

Try again?(Y/N) :
*/
#include <stdio.h>
int main() {
long a[31],sum;
int i,q,t;
char x;
do {
sum = 0;
printf("Please enter the first term : ");
scanf("%ld",&a[1]);
printf("Please enter the common ratio : ");
scanf("%d",&q);
printf("Please enter the number of terms(<=30) : ");
scanf("%d",&t);
for(i = 1;i <= t;i++) {
a[i + 1] = a[i]*q;
printf("%ld\t",a[i]);
sum = sum + a[i];
}
printf("\nsum = %ld\n\n",sum);
printf("\nTry again?(Y/N) : ");
fflush(stdin); /* 清除键盘输入缓冲区 */
scanf("%c",&x);
}while(x == 'y'|| x == 'Y');
getchar();
return 0;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
寂寞而莫我知也
2012-12-09 · TA获得超过284个赞
知道小有建树答主
回答量:347
采纳率:0%
帮助的人:232万
展开全部
最好不要用跳转关键字goto 用do{.....}while();他可以让循环至少执行一次,可以满足你的需要。goto有时引起程序的混乱,可读性不强
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
pkbill
2012-12-09
知道答主
回答量:52
采纳率:0%
帮助的人:28.3万
展开全部
1L正解,话说为什么要清除缓存啊,我调试的时候就发现计算机自动输入了一个值进去了,结果和楼主一样问题,可又不知道怎么消除它,高手能解答一下吗?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式