功能:计算机对输入的一个数据n进行前n项计算,然后计算机进行询问是继续输入数据进行一次计算还是停止计算。
程序:
#include <stdio.h>
int sum(int a);
int again_sum(char *w);
int main ()
{
int a=0 ;
char b[2];
printf("请输入一个数n:\n");
scanf("%d",&a);
sum (a); //输出前n项和采用了两中办法,一是再子程序中输出,二是下面的printf输出;
//printf ("前n项和为:%d\n",sum (a));//第一次计算完成。
fflush(stdin);
printf ("是否愿意再试一次:(Y/N)\n"); //我想继续算第二次。
scanf ("%c",b); //输入 Y或者N,存入b中
again_sum (&b[0]); //调用 下面的函数
return 0;
}
int sum(int a)
{
int b=0;
for (int i=0;i<=a;i++)
{
b+=i;
}
// return b;
printf ("前n项和为:%d\n",b);
}
int again_sum(char *w)
{
if (*w=='Y')
{
int c,v=0;
printf("请输入一个数n:\n");
scanf("%d",&c);
v=sum (c);
//printf ("前n项和为:%d",v);
}
else
{
printf("欢迎下次使用:");
}
}
在这里是把第二个scanf输入内容输入到一个数组,在这里需要注意格式的使用,scanf中不可以用到寻址符号,如果是单个输入,则需要使用取址符号,如下程序:
#include <stdio.h>
int sum(int a);
int again_sum(char w);
int main ()
{
int a=0 ;
char b;
printf("请输入一个数n:\n");
scanf("%d",&a);
sum (a); //输出前n项和采用了两中办法,一是再子程序中输出,二是下面的printf输出;
//printf ("前n项和为:%d\n",sum (a));//第一次计算完成。
fflush(stdin);
printf ("是否愿意再试一次:(Y/N)\n"); //我想继续算第二次。
scanf ("%c",&b); //输入 Y或者N,存入b中
again_sum (b); //调用 下面的函数
return 0;
}
int sum(int a)
{
int b=0;
int i;
for ( i=0;i<=a;i++)
{
b+=i;
}
// return b;
printf ("前n项和为:%d\n",b);
}
int again_sum(char w)
{
if (w=='Y')
{
int c,v=0;
printf("请输入一个数n:\n");
scanf("%d",&c);
v=sum (c);
//printf ("前n项和为:%d",v);
}
else
{
printf("欢迎下次使用:");
}
}
这里的程序还是好理解的,在编写程序时候出现了一个问题,就是在没有增添 fflush(stdin)语句时候运算结果如下图
你会发现程序只进行了第一次的scanf输入,而没有进行第二次的输入,我在查阅相关资料后得知,如果在主程序中有两个scanf函数(这里可以引申为有多个输入函数时),在完成第一次的取数据时候,我们计算机只取走了一个数据,而没有取走我们输入的回车符,因此在后面的取值操作时,我们取的是数据缓冲区上次遗留的回车符,因此没有办法进行再次输入操作。因此我们在第一次输入数据结束后需要清空缓冲区的数据,才能进行新数据的输入。
fflush(stdin); //清空输入缓冲区