- 论坛徽章:
- 0
|
我是参照c primer plus学习的现在学习到第八章字符输入输出和输入确认
现在看到一些内容很是不解
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
int i;
char ch;
while((ch=getchar())!='|')
{
if (ch>96&&ch<123)
++i;
putchar(ch);
}
printf("一共%d个有效字母",i-2);
system("PAUSE");
return 0;
}
这个判断输入中有多少有效的小写字母的程序,不知道为什么,我输入了内容后直接调用i值得到的就是比实际值多2个,比如abc就得出5个有效的结果,这个让人很苦恼,我只能用i-2暂时解决,直到可能是\n或者|本身也占一个位置 但是我加了条件判断的
请问多出来的究竟是哪两个东西呢
我知道如果是while((ch=getchar())!=EOF)的话我就不需定义一个专门的退出条件了,这样得出的结果也的确是正确的.
================================================================
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
int input;
char ch;
while (scanf("%d",&input)!=1)
{
while((ch=getchar())!='\n')
putchar(ch);
printf("error,will back");
}
system("PAUSE");
return 0;
}
上面这个例子中的我怎么也想不明白:比如我输入DDD,错误开始进入外层循环然后结果就是三次循环 提示DDDerror,willback
我明明是从scanf输入的怎么会传递到getchar()那去的
难道这个就是所谓的流
意思是他们的输入是在同一个缓冲区内?
while((ch=getchar())!='\n')和putchar(ch);究竟是怎么样的具体解释呢
请前辈们指点迷津。。。。 |
|