请教一下一个关于输入流cin的问题

来源:百度知道 编辑:UC知道 时间:2024/06/09 00:41:45
#include<iostream.h>
void main ()
{char a[20];
int k=0,i;
while(cin>>a)
{if(k==1){k=0;break;}
k=1;
}
if (k==0){cout<<"中间有空格"<<endl;}
}
这是一部分的程序,用于判断中间是否有空格的
如输入“ttt tt”则会输出“中间有空格”
请教高手这程序的原理是什么

#include<iostream.h>
void main ()
{char a[20];
int k=0,i;
while(cin>>a) //循环语句输入
{if(k==1){k=0;break;}//判断语句
k=1; //附值
}
if (k==0){cout<<"中间有空格"<<endl;}
}
学过软件工程没,那我帮你分析一下。
为什么会输出中间有空格呢。中间有空格是最后一句,那就是说不管你输入什么
最终都会执行最后一句.而执行最后一句的条件是k==0.那就是说你输入什么k都是k==0.为什么输入什么k总是等于0呢.因为你的if 条件和while循环所影响的。
分两条路径.
1、输入除0之外的任何内容.它的accii码都是大于0,而大于0就会执行while循环语句,那就会执行k=1,接着会再次让你输入,那就会执行while 里的if 语句,条件成立k就会为0,通过break跳出循环,接着到最后,条件成立,则会输出空格。
2、如果你一开始就输入0的话,则再次判断while条件是否成立,如果再次输入0,则跳出循环。不过一开始你就的附值k=0.所以最后一句也会成立,也会输出中间有空格。如果不想执行这句话的话。把最后一句if 条件改一下。本人作如下修改,作为比较。
#include<iostream.h>
void main ()
{char a[20];
int k=0,i;
while(cin>>a)
{if(k==1){k=0;break;}
k=1;
}
if (k==1){cout<<"中间有空格"<<endl;}
}
运行后输入 0 再输入0则不会出现中间有空格.
而你输入ttt tt则是第一种情况。实际上程序执行到第二个t 后就会到最后一句话,输出中间有空格。最后面的t tt都没有用到.<