Ввод с помощью scanf() в две строки

Итак, в терминале вывод всей моей программы на 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 и альфа. Затем, когда я нажимаю клавишу ввода, я хочу, чтобы я также вводил Bx, By и beta. Вместо этого он уже показывает мне результаты и завершает программу.

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() имеет возвращаемое значение по причине.

Протестируйте код с целыми числами и, если он работает, переключите десятичный разделитель с '.' в ',' или наоборот.

Кроме того, возможно, вы ограничиваете ввод двумя символами, что является проблемой практически для любого числа с плавающей запятой, поскольку 1.2 имеет 3 символа, удалите это.

Чего ты хотел добиться с %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 вызывает поведение, которое вы описали.

Другие вопросы по тегам