我的代码有问题,好消息是我确实查明了问题,坏消息是我不明白为什么这是一个问题。这应该是返回还是退出?这是我的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
}
答案 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有一点了解后,解决方案应该是微不足道的。