为什么我没有得到正确的输出

时间:2020-05-05 17:10:35

标签: c

我正在编写一段代码,要求使用P0 x y格式的两个特定点。 如果用户键入Q,则程序会终止,由于某种原因,我无法将用户输入(P0 x y)输出到输出中。当我尝试运行代码并键入P0 2 3时,它表示我已选择点0 2.00 3.00

所需的输出为P0 2 3

#include <stdio.h>

void main() {
    float a, b;
    char Q, P, input;

    printf("");
    scanf("%c", &input);

    if (input == 'Q') {
        printf("quitting program");
        return (0);
    } else {
        scanf("%c" "%f" "%f", &input, &a, &b);
        printf("you have chose points: %c %f %f", input, a, b);
    }
    return (0);
}

3 个答案:

答案 0 :(得分:1)

因为您使用两个scanf。首先scanfP,然后第二scanf从命令行(来自0)读stdin。因此,第二scanfinput = '0'之后。这就是您的程序打印0 2.00 3.00

的原因

如果要打印出P0,则必须使用字符串,例如下面的示例:

#include <stdio.h>

int main()
{
    float a, b;
    char Q, P, input;
    char point[3] = {'\0'};
    scanf( "%c" , &input);
    point[0] = input;

    if(input=='Q')
    {
        printf("quitting program");
        return 0;
    }
    else
    {
        scanf( "%c" "%f" "%f", &input, &a, &b);
        point[1] = input;
        printf("you have chose points: %s %f %f",point, a, b);
    }
    return 0;
}

答案 1 :(得分:1)

另一个答案也提到,当检查输入中的Q时,将消耗输入字节。 C标准库提供了针对此特定问题的修复程序:您可以将消耗的字节“返回”到输入设备(键盘缓冲区),然后重试从输入读取。

函数为ungetc。它需要非常特定的语法(您应该“弄钝”与刚刚读取的值相同;还必须使用stdin来指定您正在使用键盘),并且只需要一个字节就可以了。 / p>

这是您的代码以及我的更新和评论。

#include <stdio.h>

int main()
{
    float a, b;
    char Q; // only used for checking the "quit" condition
    char input[10]; // assuming 9 characters + terminating byte is enough

    scanf("%c", &Q);

    if(Q=='Q')
    {
        printf("quitting program");
        return (0);
    }
    else
    {
        ungetc(Q, stdin); // return one byte to the input device
        scanf( "%s" "%f" "%f", input, &a, &b); // "%s" read from the input as string now
        printf("you have chose points: %s %f %f",input, a, b);
    }
    return 0;
}

答案 2 :(得分:0)

您在代码上的一些观察

  • 您的main返回void,但是您返回整数
  • 您的else的{​​{1}}分支表示“不是if。此不一定表示“它是Q
  • P之后是一个数字

对我来说,您的格式如下

P
  • WHAT_FOLLOWS INDEX LIST_OF_NUMBERS (一个字符)例如可以是: WHAT_FOLLOWS代表点,P代表矩形,R代表圆形。< / li>
  • C(一个整数)可以是应该在其中存储数字的数组中的位置
  • INDEX(浮点数)是描述形状的数字

A solution

LIST_OF_NUMBERS