整数和字符之间的C兼容性

时间:2008-09-27 17:51:15

标签: c compatibility

C如何处理整数和字符之间的转换?假设你已经声明了一个整数变量并向用户询问了一个数字,但他们输入了一个字符串。会发生什么?

5 个答案:

答案 0 :(得分:6)

用户输入被视为需要使用atoi或其他转换函数转换为int的字符串。如果字符串不能作为数字进行交互,Atoi将返回0,因为它包含字母或其他非数字字符。

您可以在MSDN上的atoi文档中了解更多信息 - http://msdn.microsoft.com/en-us/library/yd5xkb5c(VS.80).aspx

答案 1 :(得分:3)

呃? 你总是输入一个字符串。然后解析将此字符串转换为数字,以各种方式(再次询问,采用默认值等)处理各种错误(溢出,不正确的字符等)。

答案 2 :(得分:3)

另外需要注意的是,在C中,字符和整数在某种程度上是“兼容的”。任何字符都可以分配给int。反过来也有效,但如果整数值不适合char,你就会丢失信息。

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 :(得分:3)

正如其他人所说,数据通常以字符串形式输入 - 唯一的问题是哪个函数用于读取。如果您正在使用GUI,则该函数可能已经处理了转换为整数和报告错误等因此以适当的方式。如果您正在使用标准C,通常更容易将值读入字符串(可能使用fgets()然后转换。虽然可以使用atoi(),但它很少是最佳选择;麻烦在于确定转换是否成功(并且由于用户输入的合法表示为零而产生零)。

通常,使用strtol()或其亲属之一(strtoul()strtoll()strtoull());要转换浮点数,请使用strtod()或类似函数。整数转换例程的优点包括:

  • 可选的基本选择(例如,基数10,或基数10 - 十六进制,或基数8 - 八进制,或上述任何使用标准C约定(007表示八进制,0x07表示十六进制,7表示十进制)。
  • 可选的错误检测(通过了解转换停止的位置)。

我为许多这些功能规范(当我不查看我的实际C标准副本时)的地方是POSIX网站(包括C99功能)。它以Unix为中心,而不是以Windows为中心。

答案 4 :(得分:0)

程序会崩溃,你需要调用atoi函数。