构建我自己的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码)。

由于提前,

安德烈

+1

你测试在将数据添加到数组后是否已达到停止字符。 – Barmar 2014-09-20 20:05:05

+1

是的,'\ n''是正确的。但是这应该实现哪个转换说明符? – mafso 2014-09-20 20:05:28

+0

作为一个说明,不可能以严格符合的方式实现'scanf'(不使用任何'* scanf'系列函数)。无法获得其推回行为(但是,“ungetc”应该用于练习目的)。 – mafso 2014-09-20 20:07:27

你应该将它添加到阵列中后不尽快你读了终止符跳出循环:

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