可以使用清理输入流fflush(stdin);这个原因是因为错误输入的内容会保留在输入流,下一次判断会从输入流开始读取,因为错误输入的内容还在,所以直接判断错误,继续循环。
但有些编译器并不支持清理输入流。所以我们这时需要用手动输入让其清除。使用getchar()让其接收错误的字符。但这样就会变成这样,如果输入多个错误就会出现多个次数的循环;直至没有错误输入;这样如果循环内容多,所消耗的资源也就多了。
所以可以使用while()来执行里面的消除字符,但如果直接这样while(getchar())就会进入无限循环,所以可以让其接收一个终止条件,每次输入完都会按回车,那就让其接收'\n'换行符终止自己的循环。
扩展资料
C语言从键盘输入数据
程序是人机交互的媒介,有输出必然也有输入。在C语言中,有多个函数可以从键盘获得用户输入:羡咐蔽
scanf():和 printf() 类似,scanf() 可以输入多种兄州类型的数据。
getchar()、getche()、getch():这三个函数都用于输入单个字符。
gets():获取一行数据,并作为字符串处理。
scanf() 是最灵活、最复杂、最常用的输入简冲函数,但它不能完全取代其他函数,大家都要有所了解。scanf 是 scan format 的缩写,意思是格式化扫描,也就是从键盘获得用户输入。
gets() 会读取用户输入的整行内容,包括空格。而 scanf() 遇到空格就结束读取,也就是说,使用 scanf() 读取的字符串中永远不会包含空格。
分类: 电脑/网络 >>程序设计 >>其他编程语言问题描述:
请看代码:
#include<iostream.h>
int main()
{
int hjsq , ljsq = 1 , kgjsq , bc
cout <<"请输入要打印的正方形的边长(注意:边长不要大于20): "
cin >>bc
if ( bc <= 20 )
{
for ( int hjsq = 1 hjsq <= bc hjsq++ )
{
cout <<"*"
}
do
{
cout <<"\n*"
for ( int kgjsq = 1 kgjsq <= bc - 2 kgjsq++ )
{
cout <<竖州 " "
}
ljsq++
cout <<"*"
}
while ( ljsq <= bc - 2 )
cout <<'\n'
for ( int hjsq = 1 hjsq <= bc hjsq++ )
{
cout <<"*"
}
cout <<'\n'
}
else
{
cout <<"边长大于20,输入错误!请重新输入!" <<endl
cout <<"请输入要打印的正方形的边长(注意:边长不要大于20): " A语句
cin >>bc B语句
}
return 0
}
A语句和B语句如果不加上,则程序正常运行,无任何问题。加上这两个语句我的本意是想在输入错误的情况下再重新输入一个符合条件的值,然后从if语句重新开始执行,可是我不知道用什么合适的语句来实现这个功能,请高手指点!!!不要用goto语句,谢谢!50分送上!!!!
解析:
一:关于你的程序,
*我觉得可读性不好——hjsq , ljsq , kgjsq , bc,这些变量很难猜出是什么意思。而且也不需要用到那么多的变量。
*A和B语句都没有什么问题。我用的是visual studio编译器,<iostream.h>需要写成<iostream>;另外cin和cout所属的名字空间也需要显式声明(比如在#include语句后加上using namespace std)。改镇缺动这两点后,程序运行正常。
二:怎样在用户输入错误情况下重新提示?
while(bc>20){...把这个循环放在画图代码的前面
...提示用户重新输入
...接受用户输入的bc
}
...画正方形
三:这里用递归不好。因为会大大降低效率——这里完全可以用while循环来实现。虽然用递归对这个程序不会有什么大的影响,但是要养成考虑效率的习惯。
四余旅蔽:下面是我写的代码。你可以对比一下你的。
#include<iostream>
using namespace std
int main()
{
unsigned short bianchang=0
while((bianchang>20)||(bianchang<1)){
cout<<"请输入正方形边长(1至20之间的整数)"<<endl
cin>>bianchang
}
for(int i=1i<=bianchangi++){
for(int j=1j<=bianchangj++){
如果在边上,打印*,否则打印空格
cout<<(((i==1)||(i==bianchang)||(j==1)||(j==bianchang))?'*':' ')
}
cout<<endl一行打完,换行
}
return 0
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)