构建我自己的scanf函数
问题描述:
为了学术目的,我必须构建自己的atoi()和scanf()函数。构建我自己的scanf函数
第一个很简单,但我在第二个中遇到了麻烦。
第一招:
int String2Inteiro (char s[])
{
int j;
int i=0;
for(j=0; s[j]!= 0; j++)
{
i=i*10 + s[j] - '0';
}
return i;
}
现在,在第二个我有一些问题,我认为这都涉及到停止条件。 我的第一次尝试是在Cicle后试图停止。
char dig;
int cont=0;
do
{
dig=getchar();
array[cont]=dig;
cont++;
} while (dig!= '\n');
的第二次尝试:
int counter=0;
char a;
char array[20];
while (a!='\n')
{
a=getchar();
vec[counter]=a;
counter=counter+1;
}
我不知道如果进入得到很好的体现,或者我应该有使用“\ 13”(CR ASCII码)。
由于提前,
安德烈
答
你应该将它添加到阵列中后不尽快你读了终止符跳出循环:
while (counter < sizeof(array)) { // Prevent buffer overflow
a = getchar();
if (a == '\n') {
array[counter] = 0; // Add trailing null to input string
break;
}
array[counter] = a;
counter++;
}
+0
它确实是我想要的。虽然,当我超过sizeof(数组)时,我期待while循环终止。 – andrescpacheco 2014-09-21 17:10:08
+0
为什么你期望它没有明确检查就终止?除非你告诉他们电脑,否则电脑不会做任何事情。 – Barmar 2014-09-21 17:18:42
你测试在将数据添加到数组后是否已达到停止字符。 – Barmar 2014-09-20 20:05:05
是的,'\ n''是正确的。但是这应该实现哪个转换说明符? – mafso 2014-09-20 20:05:28
作为一个说明,不可能以严格符合的方式实现'scanf'(不使用任何'* scanf'系列函数)。无法获得其推回行为(但是,“ungetc”应该用于练习目的)。 – mafso 2014-09-20 20:07:27