在两行上输入scanf()

时间:2015-02-28 12:30:28

标签: c numbers scanf lines

所以,在终端中,我在C中的整个程序输出应该是这样的(**之间的文本是用户输入)

**Ax Ay alpha**

**Bx By beta**

d Cx Cy

我当前的代码只接受第一行,第二行以某种方式不被扫描,而是尝试给我输出。这是输入的代码行,我认为问题只在于那部分。

scanf("%2f %2f %2f", &Ax, &Ay, &alpha );
scanf("%2f %2f %2f", &Bx, &By, &beta );

整个代码

#include <stdio.h>
#include <math.h>

#define PI 3.14159265

int main(){
    float alpha, beta, Ax, Ay, Bx, By;
    float d, Cx, Cy;

    scanf("%2f %2f %2f", &Ax, &Ay, &alpha );
    scanf("%2f %2f %2f", &Bx, &By, &beta );

    /* calculaions are here, whole lot of mess */

    printf("%.2f %.2f %.2f \n", d, Cx, Cy );
}

问题如下:我输入前三个变量 - Ax,Ay和alpha。然后,当我按下回车时,我想要它做的是让我输入Bx,By和beta。相反,它已经向我展示了结果并结束了该计划。

2 个答案:

答案 0 :(得分:2)

我怀疑它是一个区域设置问题,请尝试检查scanf()返回值以查看输入是否与格式字符串匹配

#include <stdio.h>

int main()
{
    float Ax, Ay, Bx, By, alpha, beta;

    if (scanf("%f%f%f", &Ax, &Ay, &alpha) != 3)
    {
        fprintf(stderr, "Invalid input.\n");
        return -1;
    }

    if (scanf("%f%f%f", &Bx, &By, &beta) != 3)
    {
        fprintf(stderr, "Invalid input.\n");
        return -1;
    }
    return 0;
}

这是您滥用函数时出现的问题类型的示例,scanf()因某种原因而返回值。

使用整数测试代码,如果有效,请将小数点分隔符从'.'切换为','或反之。

此外,可能是您将输入限制为2个字符,这对于几乎任何浮点数都是一个问题,因为1.2有3个字符,删除它。

答案 1 :(得分:0)

您希望%2f取得什么成果?这将扫描限制为2位数。我想你只想在零后打印两位小数:

"%2f"替换为"%0.2f",换句话说,请执行以下操作:

float a, b, c, d, e, f;
scanf("%f %f %f", &a, &b, &c);
scanf("%f %f %f", &d, &e, &f);
printf("%0.2f %0.2f %0.2f\n", a+b, d+e, f+c);

,您的程序将正常运行。 %2f导致您描述的行为。