C如何处理整数和字符之间的转换?假设您声明了一个整数变量并要求用户输入一个数字,但他们输入了一个字符串。会发生什么?
5 回答
用户输入被视为需要使用 atoi 或其他转换函数转换为 int 的字符串。如果字符串不能被解释为数字,Atoi 将返回 0,因为它包含字母或其他非数字字符。
您可以在 MSDN 上的 atoi 文档中阅读更多内容 - http://msdn.microsoft.com/en-us/library/yd5xkb5c(VS.80).aspx
呃?你总是输入一个字符串。然后,您使用各种方式(再次询问、采用默认值等)处理各种错误(溢出、不正确的字符等),将此字符串解析为数字。
另一件需要注意的是,在 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)
正如其他人所指出的,数据通常以字符串形式输入——唯一的问题是使用哪个函数进行读取。如果您使用的是 GUI,该函数可能已经以适当的方式处理转换为整数并报告错误等。如果您正在使用标准 C,通常更容易将值读入字符串(可能使用fgets()
然后转换。虽然atoi()
可以使用,但它很少是最佳选择;麻烦在于确定转换是否成功(并产生零,因为用户输入了零的合法表示)或不。
通常,使用strtol()
或其亲属之一(strtoul()
, strtoll()
, strtoull()
);用于转换浮点数,使用strtod()
或类似的功能。整数转换例程的优点包括:
- 可选的基数选择(例如,以 10 为基数,或以 10 为基数 - 十六进制,或以 8 为基数 - 八进制,或使用标准 C 约定的上述任何一种(007 用于八进制,0x07 用于十六进制,7 用于十进制)。
- 可选的错误检测(通过知道转换停止的位置)。
我在POSIX网站(其中包括 C99 函数)中获取许多这些功能规范(当我不查看实际 C 标准的副本时)。它以 Unix 为中心,而不是以 Windows 为中心。
程序会崩溃,你需要调用atoi函数。