1

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

4

5 回答 5

6

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

您可以在 MSDN 上的 atoi 文档中阅读更多内容 - http://msdn.microsoft.com/en-us/library/yd5xkb5c(VS.80).aspx

于 2008-09-27T17:55:51.167 回答
3

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

于 2008-09-27T17:52:52.997 回答
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)
于 2008-09-27T18:27:34.210 回答
3

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

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

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

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

于 2008-09-27T19:54:29.693 回答
0

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

于 2008-09-27T17:52:33.607 回答