读书人

有关定义域的有关问题

发布时间: 2012-04-26 14:01:31 作者: rapoo

有关定义域的问题,急急急!
新手,拍砖者轻点哦,谢谢!

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;

[解决办法]
探讨

1、i只能定义一次,你定义了两次。

2、
for(i=0;i<2;++i)
{
a[i]=getchar();
getchar();
};

其实应该输入4个字符才对。

[解决办法]
探讨
rewind(stdin);
你好,请问这个函数怎么用,我在百度上看的程序好麻烦,可以给个简单的例子吗,谢谢

[解决办法]
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()读掉回车是一样。

读书人网 >C语言

热点推荐