回 帖 发 新 帖 刷新版面

主题:[原创]【菜鸟求助】关于getchar()的位置

[color=FF0000][size=3][b]初学C语言,弱弱地问个很二的问题,为什么我的getchar()必须放在函数前面(见程序一)而放在后面就出问题(见程序二)?[/b][/size][/color]

[b]程序一:[/b]
#include<stdio.h>
#include <stdlib.h>
#include<math.h>
void main()
{
    char c;
    int i,n;
    float t,*a,x,p;
    printf("*******  多项式求值程序  *******\n\n");
    printf("请选择计算方法(要大写哦):\nA.课本公式(5)  B.秦九韶算法\n");
    [color=FF0000]c=getchar();[/color]
    printf("\n请输入待计算多项式的次数n以及x的值:");
    scanf("%d %f",&n,&x);
    a=(float *)malloc(sizeof(float)*n);
    printf("\n\n请输入待计算的多项式的每项系数a0,a1,...,an:\n");
    for(i=0;i<=n;i++)
        scanf("%f",&a[i]);
    if(c==65)
        {
            t=1;p=a[0];
            for(i=1;i<=n;i++)
                {
                    t=x*t;
                    p=p+a[i]*t;
                }
        }
    else
        {
            p=a[n];
            for(i=1;i<=n;i++)
            p=x*p+a[n-i];
        }
    printf("\np(%f)=%f\n\n",x,p);
    free(a);
    system("pause");
}

程序二:
#include<stdio.h>
#include <stdlib.h>
#include<math.h>
void main()
{
    char c;
    int i,n;
    float t,*a,x,p;
    printf("*******  多项式求值程序  *******\n\n");
    printf("请输入待计算多项式的次数n以及x的值:");
    scanf("%d %f",&n,&x);
    a=(float *)malloc(sizeof(float)*n);
    printf("\n\n请输入待计算的多项式的每项系数a0,a1,...,an:\n");
    for(i=0;i<=n;i++)
        scanf("%f",&a[i]);
    printf("\n\n请选择计算方法(要大写哦):\nA.课本公式(5)  B.秦九韶算法\n");
    [color=FF0000]c=getchar();[/color]
    if(c==65)
        {
            t=1;p=a[0];
            for(i=1;i<=n;i++)
                {
                    t=x*t;
                    p=p+a[i]*t;
                }
        }
    else
        {
            p=a[n];
            for(i=1;i<=n;i++)
            p=x*p+a[n-i];
        }
    printf("\np(%f)=%f\n\n",x,p);
    free(a);
    system("pause");
}

回复列表 (共4个回复)

沙发


怎么没人回复啊?

板凳

据说是因为getchar()吸收了回车符,那这个一般要怎么处理啊?

3 楼

就是因为读取了键盘缓冲区的回车符造成的。
办法之一是再用一次getchar先读取掉那个回车符;
之二是用flushall()清除键盘缓冲区。

4 楼

scanf与getchar

我来回复

您尚未登录,请登录后再回复。点此登录或注册