У меня есть программа, которая читает пользовательский ввод как таковой:
char c;
scanf("%c", &c);
а затем проверяет, является ли это цифрой:
if (isdigit(c)) {
int f = atoi(c);
return f;
}
switch(c) {
case 'q':
exit(1);
break;
...
}
...
Пример программы:
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
int main() {
char c;
scanf("%c", &c);
if (isdigit(c)) {
int f = atoi(&c);
printf("f: %d\n", f);
return f;
}
switch(c) {
case 'q':
printf("q\n");
return -1;
break;
}
return 0;
}
Однако, когда я ввожу, например, 10, ввод становится 1, 0 и \n. Я хочу 10. Как мне прочитать, например, «10», «100» и «4», а также другие символы, такие как «q»?
Помните, что аргументом atoi
является строка с нулем в конце. У него также нет никакой проверки. Используйте, например. strtol для функции преобразования с проверкой.
@ForceBru, если я прочитаю строку, то как мне преобразовать ее в число с плавающей запятой и использовать оператор switch?
@Someprogrammerdude спасибо за напоминание. Я только начинаю изучать C, и я знаю падение scanf и atoi и т. д. Это только для начала. Еще раз спасибо!
@pointersarehard, вы можете использовать strcmp
вместо оператора switch
@ForceBru использует scanf для строки: char string[200];
приводит к format specifies type 'char *' but the argument has type 'char (*)[256]' [-Wformat]
@pointersarehard, попробуйте прочитать &string[0]
вместо string
.
Используйте обычный string
, а не &string
. Или &string[0]
(это то, во что превратится простое string
).
Теперь я не могу использовать «isdigit», потому что он не может принимать массив символов: warning: incompatible pointer to integer conversion passing 'char [10]' to parameter of type 'int'
Сначала прочитайте свою строку. Затем проверьте, не является ли это командой «quit». Затем попробуйте преобразовать его в целое число. И если преобразование прошло успешно (и вся строка была преобразована), используйте целочисленное значение.
переменные char могут сохранять только один символ. Поэтому, если вы хотите иметь несколько символов (числа также являются символами) в переменной char, вы должны использовать string
или char VARIABLE[size]
. Например: char variable[10]
может сохранить до 10 символов. Но тогда вы больше не сможете использовать isdigit()
таким образом. Вместо этого вы должны использовать цикл для проверки каждого символа строки.
Вы можете прочитать строку