При вводе данные не попадают в переменную

Рейтинг: -1Ответов: 1Опубликовано: 13.08.2023

в ответе необходимо вывести вещественное число, поэтому перевожу в double

 // ввожу 23 45 +
    // выводит 0 45 + и 45
    #include <stdio.h>
    #include <locale.h>

    int main() {
        setlocale(LC_ALL, "");
        int a, b;
        char s;
        scanf("%d%d%s", &a, &b, &s);
        printf("%d %d %c\n", a, b, s);
        switch (s) {
            case '+': printf("%.2lf", (double) a + b); break;
            case '-': printf("%.2lf", (double) a - b); break;
            case '/': 
                switch (b) {
                    case 0: printf("ERROR!"); break;
                    default: printf("%.2lf", (double) a / b); break;
                };
            case '*': printf("%.2lf", (double) a * b); break;
            default: printf("ERROR"); break;
        };
        return 0;
    }

Ответы

▲ 1Принят

У вас UB. В разных компиляторах будет по-разному. В VС++ работает нормально, например.

Но главное — вы читаете символ как строку — %s — что приводит к тому, что завершающий нулевой символ пишется куда-то — за пределами выделенной для переменной s памяти. Например, в переменную a :)

Используйте при чтении, как и при выводе, спецификатор %c.