2 qq 36599218 qq_36599218 于 2017.01.08 14:23 提问

c语言中,为什么字符无法进入for循环

#include
#include
int myatoi(char *ptr);
int main(void)
{
char input[81];
int check;

puts("enter a sentence only number:");
fgets(input, 81, stdin);
check = myatoi(input);
if (check)
    printf("%d read\n", check);
else
    puts("no ordered number input");
getchar();
return 0;

}

int myatoi(char * ptr)
{
int mydigit,i;

for (i = 0; i < 81; i++)
{
    if (isdigit(ptr[i]))
    {
        if (i == 1)
            mydigit = ptr[i];
        else
            mydigit = mydigit * 10 + ptr[i];
    }
    else
        return 0;
}
return mydigit;

}
调试输入纯数字的时候,程序中断并提示mydigit未初始化,想了想是mydigit这个变量没有进入for循环造成的,请问这个代码应该怎么改呢?谢谢

3个回答

LD0807
LD0807   2017.01.08 17:57
已采纳

逻辑有问题

 if (isdigit(ptr[i]))
    {
        if (i == 1)
            mydigit = ptr[i];
        else
            mydigit = mydigit * 10 + ptr[i];
    }
    else
        return 0;

当第一次循环,满足条件进第一个if,i是0,就进 mydigit = mydigit * 10 + ptr[i];但是mydigit还未初始化,你咋个和10乘。i==0的条件你需要考虑一下。应该就没问题了

qq_36599218
qq_36599218 谢谢,我还发现了一个问题,读到‘\0'的时候也会返回0,已经想通了,看来程序员数东西必须从0开始
11 个月之前 回复
ai977313677
ai977313677   2017.01.08 18:23

这块儿mydigit = mydigit * 10 + ptr[i];出错,不是没有进入for循环,而是你没有初始化这个变量,就让他参与运算,乘10到底是啥东西去乘。

sum_TW
sum_TW   2017.01.08 19:02

对的,第一次循环不知道你乘的什么东西。

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!