Вы используете %s
для чтения в char
. Это неопределенное поведение.
Вы должны использовать правильные спецификаторы формата, чтобы избежать этого. В этом случае %c
.
Кроме того, чтобы пропустить символ новой строки / возврата, который вы найдете во вводе после сканирования номера, заранее используйте пробел, т. Е. " %c"
.
Конец ответа,с неопределенным поведением может произойти все что угодно.
Просто для забавы, однако попробуйте этот код и используйте 2 и 257 в качестве ввода:
#include <stdio.h>
int main(){
int a=99, b=98;
char c='x';
printf("Enter 2 numbers:\n");
scanf("%d %d", &a, &b);
printf("You entered %d %d. Now enter an operator:\n", a, b);
scanf(" %s", &c);
printf("After scanning a null-terminated string into a char variable, a and b are now %d %d.\n", a,b);
}
Если нам повезет, и вы получите такой же эффектНеопределенное поведение, как и я, теперь вы узнали кое-что о том, где заканчивается 0 в конце строки оператора. А именно, в одном из байтов переменной b
.
С предложенным вводом вы, вероятно, получите 2 и 256. 2 выжило, 257 получил нулевой байт, обнуляемый, и в итоге получилось 256.
Также попробуйте ввести 2 3 и "+ A". Вы знаете, что «A» имеет значение ascii 65, не так ли?
В качестве последнего совета изучите эту статью. Это очень полезно для всего, что вы хотите прочитать.
http://sekrit.de/webdocs/c/beginners-guide-away-from-scanf.html