首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

有3个《c和指针》里的有关问题

2012-04-07 
有3个《c和指针》里的问题在看《C和指针》,有3个问题:1.有一句是这样的while(nummax&&scanf(%d,&columns[nu

有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是有些讲究的,具体情况你可以百度一下。
希望对你有帮助。

热点排行