Это потому, что ch - это символ или строка, например.char ch;а не char ch [20];
Да.atoi(ch)
даже не является допустимым C и не может правильно скомпилироваться.
В этом случае вы можете создать временную строку на основе ch
и нулевого терминатора.Например, через составной литерал: (char[2]){ch, '\0'}
.
И вы никогда не должны использовать atoi
для каких-либо целей, поскольку он плохо обрабатывает ошибки и является совершенно лишней функцией.Вместо этого используйте семейство функций strtol
.
Вы можете вызвать strtol
следующим образом:
strtol( (char[2]){ch, '\0'}, // string to convert from
NULL, // end pointer, not used, set to NULL
10 ); // base 10 = decimal
Пример:
printf(" %d ", (int)strtol( (char[2]){ch, '\0'}, NULL, 10) );
Что полностью эквивалентноболее читабельный:
char tmp[2] = { ch, '\0' };
int result = (int) strtol(tmp, NULL, 10);
printf(" %d ", result);