Я пытаюсь написать простой двоичный калькулятор, чтобы познакомиться с C. по какой-то причине первая проверка ввода работает нормально, и хотя вторая проверка чисел записывается почти так же, если пользователь вводит ошибочный ввод, цикл while просто бесконечно циклически, не ожидая ввода нового пользователя. Вот код и спасибо за помощь.Проверка ввода в C
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main() {
char operator[20];
char valid_operator[4] = "+-*/";
printf("Enter operator: ");
scanf("%s", operator);
printf("You entered: %s\n", operator);
while(strchr(valid_operator, (int)operator[0]) == NULL) {
printf("%s is not a valid operator. Enter +, -, /, or *: ", operator);
scanf("%s", operator);
}
Код работает до настоящего момента. Эта следующая часть бросается в бесконечный цикл, если пользователь вводит ошибочный вход в первый раз. Повторного запроса никогда не происходит.
int input1;
int input2;
printf("Enter the two inputs (separated by whitespace): ");
int num_ints = 1;
num_ints = scanf("%d %d", &input1, &input2);
printf("Input 1: %d. Input 2: %d.\n", input1, input2);
while(num_ints < 2){
printf("Invalid input. Enter two integers separated by whitespace: ");
num_ints = 0;
num_ints = scanf("%d %d", &input1, &input2);
printf("Input 1: %d. Input 2: %d.\n", input1, input2);
}
return 0;
Держу пари, это о .. новая строка –
использовать fgets для чтения с клавиатуры, используйте sscanf, чтобы извлечь из строки –
'strchr (valid_operator, ...)' не будет работать, потому что его определение отсутствует '\ 0' terminator, необходимый для строковых операций. Попробуйте 'char valid_operator [] =" + - */";' Поскольку вы ограничили свой размер '4', в массиве нет терминатора. –