2008-09-27 2 views
1

Как C обрабатывает преобразование между целыми числами и символами? Скажем, вы объявили целочисленную переменную и попросите пользователя ввести число, но вместо этого введите строку. Что случилось бы?C Совместимость между целыми и символами

ответ

6

Пользовательский ввод обрабатывается как строка, которая должна быть преобразована в int с использованием atoi или другой функции преобразования. Atoi вернет 0, если строка не может быть интерпретирована как число, потому что она содержит буквы или другие нечисловые символы.

Вы можете прочитать немного больше в документации atoi на MSDN - http://msdn.microsoft.com/en-us/library/yd5xkb5c(VS.80).aspx

0

Программа потерпит крах, вам нужно вызвать функцию atoi.

3

А? Вы всегда вводите строку. Затем вы анализируете преобразование этой строки в число с различными способами (повторное задание с использованием значения по умолчанию и т. Д.) Для обработки различных ошибок (переполнение, неправильные символы и т. Д.).

3

Другое дело, следует отметить, что в C, символы и целые «совместимы» в какой-то степени. Любой символ может быть назначен для int. Обратное также работает, но вы потеряете информацию, если целочисленное значение не вписывается в символ.

char foo = 'a'; // The ascii value representation for lower-case 'a' is 97 
int bar = foo; // bar now contains the value 97 
bar = 255; // 255 is 0x000000ff in hexadecimal 
foo = bar; // foo now contains -1 (0xff) 
unsigned char foo2 = foo; // foo now contains 255 (0xff) 
3

Как отметили другие люди, данные, как правило, вводится в виде строки - единственный вопрос, какая функция используется для выполнения чтения. Если вы используете графический интерфейс, функция может уже иметь дело с преобразованием в целое число и сообщениями об ошибках и так соответствующим образом. Если вы работаете со стандартом C, обычно проще читать значение в строке (возможно, с fgets(), а затем конвертировать. Хотя можно использовать atoi(), это редко лучший выбор, проблема заключается в том, и производится ноль, так как пользователь ввел законное представление нуля) или нет

Как правило, используют strtol() или один из его родственников (strtoul(), strtoll(), strtoull());. для преобразования чисел с плавающей точкой, использовать strtod() или аналогичную функцию. Преимущество целых программ конверсии включает в себя:

  • выбор необязательного основания (например, основание 10 или основание 10 - шестнадцатеричный или базовый 8 - восьмеричный или любой из вышеперечисленных с использованием стандартных условных обозначений C (007 для восьмеричных, 0x07 для шестнадцатеричных, 7 для десятичных знаков).
  • необязательное обнаружение ошибок (зная, где конверсия остановлена).

место я иду на многие из этих спецификаций функций (когда я не смотрю на мою копию фактического стандарта C) является POSIX веб-сайт (который включает в себя функции C99). Он ориентирован на Unix-ориентированный, а не на Windows-ориентированный.