Я программист на Java, пытающийся изучить C для класса и человека, я не могу осмыслить это. Нет причин, по которым это не должно работать, и все же это не так. Я пытаюсь написать простое приложение-калькулятор, и независимо от того, как я его пишу, первое число, которое я ввожу (переменная a), оказывается равным 0, но второе - в порядке. При вводе 5 + 6 на выходе получается 6. Что мне не хватает?
#include <stdio.h>
int main()
{
long int a, b, c;
char op;
c = 0;
printf("Enter the expression: ");
scanf("%ld %s %ld", &a, &op, &b);
switch(op){
case('+'): c = a+b; break;
case('-'): c = a-b; break;
case('*'): c = a*b; break;
case('/'): c = a/b; break;
default: break;
}
printf("\n%ld", c);
return 0;
}
Вы должны были использовать для оператора %c
, а не %s
.
Благодарю. исправил, но все равно получаю тот же результат. Каждый учебник по scanf, который я просматривал в Интернете, говорит мне, что это правильный способ его настройки.
Просто заставил его работать. По какой-то причине, когда я удаляю пробелы между% ld% c и% ld и соответствующим образом корректирую ввод (5 + 6), это работает.
Пожалуйста, предоставьте пример сеанса * input * / в виде копирования и вставки с консоли, где вы ввели ввод и был показан соответствующий вывод
Функция scanf
возвращает значение макроса EOF, если происходит сбой ввода.
до завершения первого преобразования (если таковое имеется). В противном случае функция возвращает
количество назначенных элементов ввода, которое может быть меньше, чем предусмотрено, или даже равно нулю в
случай раннего сбоя сопоставления.
Поэтому всегда проверяйте, успешно ли работает scanf
и правильно ли назначено количество элементов.
И полезно знать о спецификаторах преобразования (что следует после символа %
) и модификаторах длины и их значениях в C.
Ознакомьтесь с разделами проекта комитета C (N1570) 7.21.6.2 Функция fscanf
и 7.21.6.4 Функция scanf
, и вы получите хорошее представление о том, как использовать scanf
.
Я не уверен, что вы вводите 5<space>+<space>6
или 5+6
(без пробелов). Если вы делаете первое, попробуйте сделать второе, то есть number1+number2
без пробелов между символами.
Также удалите пробелы в scanf("%ld %s %ld")
.
Надеюсь это поможет.
Действительно, удаление пробелов во вводе и объявлении scanf помогло. Но почему?
Думаю, эта ссылка может быть полезна @Nihilish. stackoverflow.com/questions/47903523/…
%c
предназначен для символа, а не%s
.scanf
также имеет возвращаемое значение, которое вы должны проверить, чтобы убедиться, что он считывает ожидаемое количество элементов.