Чтобы получить что-то, что не является целым числом, вы должны scanf
что-то, что не является целым числом.
char* input;
do {
printf("\nInsert the score you obtained, or exit to quit: ");
scanf("%[^/n]", input);
...
Теперь, когда у вас есть переменная, которая может содержать и "выход", и какое-то число (представленное в виде символов), вам нужно принять решение на основе того, какой тип ввода вы получили.
char input[80];
do {
printf("\nInsert the score you obtained, or exit to quit: ");
scanf("%[^/n]", &input);
while ( strncmp(input, "exit", 4) == 0 );
это также означает, что вам, возможно, придется преобразовать «строку» числа в числовое значение.
char input[80];
do {
printf("\nInsert the score you obtained, or exit to quit: ");
scanf("%[^/n]", &input);
int number = convert_to_number(input);
while ( strncmp(input, "exit", 4) == 0 );
, но преобразование должно происходить только в том случае, если оно выглядит как число
do {
printf("\nInsert the score you obtained, or exit to quit: ");
scanf("%[^/n]", &input);
if ( looks_like_number(input) ) {
int number = convert_to_number(input);
}
} while ( strncmp(input, "exit", 4) == 0 );
и, наконец, вам может потребоваться собрать несколько входов, например l oop примет их сейчас
do {
printf("\nInsert the score you obtained, or exit to quit: ");
scanf("%[^/n]", &input);
if ( looks_like_number(input) ) {
sum = add(sum, convert_to_number(input));
}
} while ( strncmp(input, "exit", 4) == 0 );
Это только одно решение из очень большого числа возможных способов сделать это.
Это решение также может быть улучшено (например, обрезка пробела вокруг флага «выход», чтобы пользователь мог набрать «выход» или «выход», чтобы уйти. Можно также сделать l oop не oop, поскольку вопрос, кажется, подразумевает ввод одного числа или «выход» один раз, в то время как al oop будет разрешать много чисел до тех пор, пока не будет напечатан exit.И можно удалить глупую функцию add
, которая использовалась только для демонстрации с помощью Слово очень ясная идея, когда +
может подойти.
Даже если вышеуказанный подход l oop / не идеально подходит для ваших потребностей, пожалуйста, внимательно посмотрите на него, потому что идеи в нем может быть использован для успеха вашей программы.
Кроме того, не используйте isdigit
для проверки всего числа. Смотрите sscanf
, что похоже на printf
, но для чтения материала из строк . sscanf
ваш номер вне строки и проверьте возвращаемое значение, чтобы увидеть, нашли ли вы число в строке.