新手不知道为什么代码出错,但知道它出错的地方

时间:2010-09-28 23:48:58

标签: c

我的代码有问题,好消息是我确实查明了问题,坏消息是我不明白为什么这是一个问题。这应该是返回还是退出?这是我的getNums()函数,...到目前为止。首先我的代码调用getLine()获取行并返回其字符长度。然后给出nums,行,行的长度,以及用于放入数字的空数组。并且假设返回它刚刚放入的数字。

int getNums(char s[], int endMarker, int numarray[])
{
    char c;
    double value;
    int counter =0;
    int i,j;
    for(i=0;i<endMarker;i++) {
        while ((c=s[i]!='\n')&&(c!=' ')) {
            //errors
            if ( (c<'0') || (c>'9') ) {
                return(-1); //was exit testing return, **this always kicks me out**
                if( counter > 6){
                    return(-2);
                } //was exit testing return
                s[i]=c;
                i++;
                value = value*10+'c'-'0';
            }else
                numarray[j]=value;
            j++;
            counter++;   
        }
        if ((c=getchar())==' ') {      
            i++;
        }
    }
    return (counter);
    printf("%c,%c:",counter,value); // for testing
}

4 个答案:

答案 0 :(得分:7)

c=s[i]!='\n'没有做你认为它正在做的事情。不等式运算符的优先级高于赋值运算符。如果c不等于s[i],则变量'\n'将设置为1,如果相等,则变量将设置为零。

您应该将作业移至较早的语句,或在其周围加上括号。

答案 1 :(得分:2)

只是看一下代码,它似乎在很多地方都有很多问题。至少IMO,第一个(也可能是最大的)问题是它应该被分解成许多单独的函数。

其次,格式化很差。例如,缩进使得它看起来像某些语句由if控制,实际上并非如此。

第三,你是不匹配的类型,将int和double传递给printf,但是对两者都使用%c(char)转换。

可能还有更多,但直到你把它们拉直(尤其是压痕),试图找出更多可能是浪费时间。

答案 2 :(得分:1)

您的代码存在一些问题(除了它没有正确缩进)。我会在看到它们时解决它们。

我认为您的while循环中不需要for循环。您已经使用for遍历字符串中的每个字符。也许您想要针对'n'' '检查每个字符,您只需使用if

乍一看,看起来你正试图遍历字符串两次,因为你有两个循环而你在两个不同的地方做i++。这让我相信你还没有想过你的算法。我认为你应该坐下来写一些伪代码。逐步列出您希望您的功能以简单的英语完成,并确保在您编写一行代码之前在逻辑上有意义。

此外,如果您从函数return,该函数将停止执行。因此,如果您只想跳过执行循环的迭代,请改用continue。看看你的代码我认为你可能有一个return,你真正想要continue

你可以缩进你的代码,使其更易读,更容易理解吗?

答案 3 :(得分:1)

我认为在尝试解决当前问题之前,您至少应该尝试阅读http://www.acm.uiuc.edu/webmonkeys/book/c_guide/introduction.html或类似内容。你似乎完全不知道自己在做什么,在你至少对C有一点了解后,解决方案应该是微不足道的。