有关定义域的问题,急急急!新手,拍砖者轻点哦,谢谢!C/C++ code#includestdio.hvoid main(){for(int i1i
有关定义域的问题,急急急!
新手,拍砖者轻点哦,谢谢!
C/C++ code#include<stdio.h>void main(){ for(int i=1;i<3;++i) { ; } for(int i=3;i>=0;--i) { ; }}
问题1,我在第一个for语句中定义了i,作用域不是只在这个for语句中的吗,我个人觉得和第二个for语句没什么冲突吧
运行时错误错误提示error C2374: 'i' : redefinition; multiple initialization,为什么会这样!再问一下, 这样的只在for语句中定义i好不好,真正写程序时是不是都写在外面
C/C++ code#include<stdio.h>void main(){ int i; char a[2]; for(i=0;i<2;++i) { a[i]=getchar(); }; printf("%c%c\n",a[0],a[1]);}
问题2:我输入两个字符:q w,但是输出的是q和空格,为什么不是q w,我把程序改成
C/C++ code#include<stdio.h>void main(){ int i; char a[2]; for(i=0;i<2;++i) { a[i]=getchar(); getchar(); }; printf("%c%c\n",a[0],a[1]);}
这样就可以了,在什么时候需要注意究竟要不要加getchar();谢谢!
新手,拍砖轻点哦!
[解决办法]1、i只能定义一次,你定义了两次。
2、
for(i=0;i<2;++i)
{
a[i]=getchar();
getchar();
};
其实应该输入4个字符才对。
[解决办法]第一个问题: 你代码没问题.只是你用的vc6.0,而vc6.0恰好不支持这样写而已.
第二个问题:
用scanf读取字符串或者字符的时候容易出现缓冲区残留'\n'的情况。
于是下次读取的时候,就会读取到'\n'.
为了防止这种情况,可以在scanf函数之前加下面三条语句之一:
标准:rewind(stdin);
windows扩展:fflush(stdin);
暴力:stdin->_cnt=0;
[解决办法][解决办法][解决办法]rewind(stdin);这个函数是复位函数,相当于重新打开程序的效果。
[解决办法] The rewind() function sets the file position indicator for the stream pointed to by stream to the beginning of the file. It is equivalent to:
(void) fseek(stream, 0L, SEEK_SET)
fseek会清理缓存+lseek,所以和getchar()读掉回车是一样。