Ввод с помощью 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
вызывает поведение, которое вы описали.