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开始
一年多之前 回复
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币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
经典错误:插入for循环后程序无法运行
经典错误:插入for循环后程序无法运行标签:C语言 死循环by 小威威本文的目的主要是为大家提供查找问题的思路。 前几日我写了一个程序:# include <stdio.h> int main(void) { int N, x, y, m = 0, n = 0, i, h = 0, a[50] = {0}; scanf("%d%d%d", &N, &x, &y); prin
C语言中字符串的输入问题
在C语言的字符串输入中,定义一个char型的字符串: 如果用while(1)循环,那么清理键盘缓存很有必要,否则在上一次gets中输入的回车键会计算到下一个gets中导致错误。 清理键盘缓存的代码是rewind(stdin); 下面是一个判断输入字符串是否是回文字符串的程序
C语言for循环、while循环(含math.h)
int i = 0; for(i = 0;i printf(“i=%d\n”,i);//循环体,反复执行的代码部分。 } 判断是否是完全平方数方法: 求完全平方根的double类型和int类型进行对比,如果相等,说明是整数。 #inclued int d = (double)sqrt(a) == (int)sqrt(a)?1:0; break 结束当前for循环。 break
c语言中for循环的执行顺序
测试c语言中的for循环的执行顺序
C语言学习—浅谈for循环
for(int count = 1 ; count&amp;lt;=10 ; ++count) { printf(&quot;%d&quot;,count); }·第一个控制表达式int count=1在循环开始时执行,且只执行一次。·第二个控制表达式必须是一个逻辑表达式,且在每次循环迭代开始重复前计算。·第三个控制表达式++count在每一次循环迭代结束时执行。注意:for循环的表达式包含在括号内,每个表达使用分号隔...
c语言的循环之for循环
D ennisRitchie 过世了,他发明的c语言,一个影响深远并彻底改变世界的计算机语言。C语言的诞生是偶然的,它仅仅只是UNIX系统的附加产物。但是也丝毫掩盖不了它王者的地位,看看2014年的语言排行榜:历经40多年的洗礼,多少语言随大浪东去,辉煌一阵又迅速湮 灭,唯有C语言,傲视群雄! 今天很多语言都受到了c语言的影响,c++,java,c#,Perl,php,objective-c
C语言中如何输出一些特殊的字符
在编写程序的时候 我们可能会遇到这样的问题 我们在输出一些特殊字符的时候会无法输出  比如说单双引号  这时候我们就需要在想输出的符号面前加上反斜杠‘\’  比如: printf("我说:\"你是一个聪明的孩子\“"); ------》  我说:”你是一个聪明的孩子“    这样我们的双引号就可以输出了
C语言基础教学——循环结构之for循环(第四课)
C语言中的循环结构分为三类: 1、for()循环 2、while()循环 3、do while()循环 何为循环:程序自动重复某几个语句1、for()循环,最常用的循环 语法结构:for(语句1;语句2;语句3){ 循环体 }语句1:初始化循环变量 语句2:判断语句 语句3:重新赋值循环变量 循环体:需要重复执行的语句 例程:#include<stdio.h> int ma
C语言编程:字符串连接
有两个含有数字和字母的字符串,要求把它们合并成一个新的字符串。在新字符串中,不许有重复的符号,并且各字符按照从小到大的顺序排列,即:数字 操作要求如下:输入:两个字符串,以空格分隔 输出:合并后的字符串原题网址:http://zhidao.baidu.com/question/352327593.html//====================================看到网上的答案,觉
C语言中for循环,while循环与do-while 循环的比较
C语言的三种循环语句比较