c - 构建我自己的 scanf 函数

标签 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 代码)。

提前致谢

安德烈

最佳答案

您应该在读取停止字符后立即跳出循环,而不是在将其添加到数组之后:

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

关于c - 构建我自己的 scanf 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25952801/

相关文章:

c - 是否可以将这种无锁的 32 位哈希表算法用于 64 位 key ?

c - 这段 C 指针代码有什么作用?

c++ - new-Operator 大幅增加了 Arduino 草图的大小——为什么?

c - 扫码不行

go - 为什么 Golang 会这样处理 atoi.go 中的截断?

xmlNodeGetContent() 可以返回 NULL 吗?

c - 使用 sscanf 验证十六进制格式的命令字符串

无法让 fscanf 在简单程序中正确执行

c - 我想加上字符串数据类型的数字

php - 在 PHP 中实现 C 的 atoi()