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;
} 展开
请问各位大神,是哪里出错了呢?
#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;
} 展开
4个回答
展开全部
这个错误我也遇见过:(你调试下就能看出来)
在 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++都可以
在 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++都可以
展开全部
/*
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;
}
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;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
最好不要用跳转关键字goto 用do{.....}while();他可以让循环至少执行一次,可以满足你的需要。goto有时引起程序的混乱,可读性不强
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
1L正解,话说为什么要清除缓存啊,我调试的时候就发现计算机自动输入了一个值进去了,结果和楼主一样问题,可又不知道怎么消除它,高手能解答一下吗?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询