有3个《c和指针》里的问题
在看《C和指针》,有3个问题:
1.有一句是这样的while(num<max&&scanf("%d",&columns[num])==1&&column[num]>=0)
我想问下中间的==1是什么意思,这个程序有点长,不好全打出来,在<c和指针>的第2页下面
2.在《c和指针》里,有个这样写的
- C/C++ code
void rearrange(......){ int .. int .. int .. for(....) int nachars=....}我想问下,怎么之前定义了,在for循环里还可以定义吗?
3.也是在<c和指针>
有个复制函数这样写的:
strcpy(output + output_col,input + column[col],nchars);
我想问下以前我学的复制函数里面没有3个东西的啊!不是都是两个的吗?
请每个都具体点解释,本人新手,不要讲得太高深,谢谢各位啦!
[解决办法]
1.==1是scanf的返回值,你可以查查scanf的返回值
2.可以定义,作用域不同……
3.是strncpy吧?
[解决办法]
第一个问题:是scanf函数返回值问题。查看msdn有如下解释:Return Value
Both scanf and wscanf return the number of fields successfully converted and assigned; the return value does not include fields that were read but not assigned. A return value of 0 indicates that no fields were assigned. The return value is EOF for an error or if the end-of-file character or the end-of-string character is encountered in the first attempt to read a character
即当数据被读入变量失败时,返回0,读入错误,返回EOF,即-1,读入成功就返回1.所以这里==1表示我们输入的数成功的存储在该数组元素中啦
[解决办法]
第二个是可以,不过与for循环外面定义的不一样,虽然同名,但是不同变量,for循环里定义的变量活动范围局限于for循环里,出了for循环,其里的变量内容都会释放,变量空间从而被回收。
[解决办法]
第三个问题,是strncpy,msdn里也讲得很清楚,
char *strncpy( char *strDest, const char *strSource, size_t count );
意思就是将source这个字符串里前count位复制到dest字符串里,具体复制情况,msdn里有例子,讲得很清楚。
[解决办法]
第二个问题 GOOGLE 局部变量
第三个问题 第三个参数应该是拷贝字符数, 见6楼
[解决办法]
问题一:scanf()的返回值是输入成功的字符数量。你可能疑惑于==和&&,查一下c语言的运算符,==的优先级是高于&&的。所以while(num<max&&scanf("%d",&columns[num])==1&&column[num]>=0)
是这样运行的:while((num<max) && (scanf("%d",&columns[num])==1) && column[num]>=0)
对运算符的优先级熟悉了以后就可以省去不必要的括号。
问题二:是可以的,变量的作用域不同。在for循环中有和for循环外中的变量重名的变量,暂时屏蔽for循环外的变量,出了for循环解除屏蔽。
比如:
int i = 9;
...
for()
{
int i = 8;
...
}
循环之外i=9;循环之内i=8;
问题三:strcpy不可能是三个param,或者是你看错了,或者是印刷错误。三个param应该是char * strncpy(char *dest, char *src, size_t n); 这里的n是有些讲究的,具体情况你可以百度一下。
希望对你有帮助。