繁体   English   中英

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

[英]C Compatibility Between Integers and Characters

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

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

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

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

要注意的另一件事是,在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)

正如其他人所指出的那样,数据通常以字符串形式输入-唯一的问题是使用哪个函数进行读取。 如果使用的是GUI,则该函数可能已经以适当的方式处理了到整数的转换和报告错误的问题。 如果您使用的是Standard C,通常更容易将值读取为字符串(也许使用fgets()然后进行转换。尽管可以使用atoi() ,但这并不是最佳选择;麻烦在于确定是否转换成功与否(因为用户输入的合法表示为零,所以产生了零)。

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

  • 可选的基数选择(例如,以10为基数或以10为基数的十六进制,或以8为基数的八进制,或使用标准C约定的上述任意一种(八进制为007,十六进制为0x07,十进制为7)。
  • 可选的错误检测(通过知道转换在哪里停止)。

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

该程序将崩溃,您需要调用atoi函数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM