构建我自己的scanf函数

时间:2014-09-20 20:02:04

标签: c scanf atoi

出于学术目的,我必须构建自己的atoi()和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 个答案:

答案 0 :(得分:1)

一旦读取停止字符,就应该在循环中断开,而不是在将其添加到数组之后:

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++;
}