我一直在做一个相当简单的程序,将字符串(假设输入数字)转换为整数。
完成后,我注意到一些非常奇特的“错误”,我无法回答,主要是因为我对如何进行的了解有限。scanf()
, gets()
and fgets()
功能发挥作用。 (不过我确实读了很多文献。)
因此,无需编写太多文字,以下是程序代码:
#include <stdio.h>
#define MAX 100
int CharToInt(const char *);
int main()
{
char str[MAX];
printf(" Enter some numbers (no spaces): ");
gets(str);
// fgets(str, sizeof(str), stdin);
// scanf("%s", str);
printf(" Entered number is: %d\n", CharToInt(str));
return 0;
}
int CharToInt(const char *s)
{
int i, result, temp;
result = 0;
i = 0;
while(*(s+i) != '\0')
{
temp = *(s+i) & 15;
result = (temp + result) * 10;
i++;
}
return result / 10;
}
这就是我一直遇到的问题。一、使用时gets()
功能,程序完美运行。
二、使用时fgets()
,结果有点错误,因为显然fgets()
函数最后读取换行符(ASCII 值 10),这会搞乱结果。
三、使用时scanf()
函数,结果是完全错误的,因为第一个字符显然具有 -52 ASCII 值。对于这一点,我没有任何解释。
现在我知道了gets()
不鼓励使用,所以我想知道是否可以使用fgets()
在这里,所以它不会读取(或忽略)换行符。
另外,这有什么关系scanf()
这个程序中的函数?