2008 iis配置网站,wordpress 顶部工具栏,创建公司网站需要准备哪些素材,房地产销售基础知识新手必看假设要编写一个将一系列数字读入到数组中的程序#xff0c;并允许用户在数组填满之前结束输入。一种方法是利用cin。请看下面的代码#xff1a;
int n;
cin n;
如果用户输入一个单词#xff0c;而不是一个数字#xff0c;情况将如何呢#xff1f;发生这种类型不…假设要编写一个将一系列数字读入到数组中的程序并允许用户在数组填满之前结束输入。一种方法是利用cin。请看下面的代码
int n;
cin n;
如果用户输入一个单词而不是一个数字情况将如何呢发生这种类型不匹配的情况时将发生4种情况
·n的值保持不变
·不匹配的输入将被留在输入队列中
·cin对象中的一个错误标记被设置
·对cin方法的调用将返回false如果被转换为bool类型。
方法返回false意味着可以用非数字输入来结束读取数字的循环。非数字输入设置错误标记着必须重置该标记程序才能继续读取输入。clear方法重置错误输入标记同时也重置文件尾EOF条件参见第5章。输入错误和EOF都将导致cin返回false第17章将讨论如何区分这两种情况。下面来看看两个演示这些技术的示例。
假设要编写一个程序来计算平均每天捕获的鱼的重量。这里假设每天最多捕获5条鱼因此一个包含5个元素的数组将足以存储所有的数据但也有可能没有捕获这么多鱼。在程序清单6.13中如果数组被填满或者输入了非数字输入循环将结束。
//6.13
#if 1
#includeiostream
using namespace std;
const int Max 5;
int main()
{
//get data double fish[Max];cout Please enter the weights of your fish.\n;cout You may enter up to Max fish q to terminate.\n;cout fish #1: ;int i 0;while (i Max cin fish[i])//cin fish[i]是一个cin方法函数调用该函数返回cin。如果cin位于测试条件中则将被转换为bool类型。如果输入成功则转换后的值为true否则为false。//如果表达式的左侧为false则C将不会判断右侧的表达式。在这里对右侧的表达式进行判定意味着用cin将输入放到数组中。如果i等于Max,则循环结束而不会将一个值读入到数组后面的位置中。{if (i Max)cout fish # i 1 : ;}//calculate averagedouble total 0.0;for (int j 0; j i; j)total fish[j];//report resultsif (i 0)cout No fish.\n;elsecout total / i average weight of i fish\n;cout Done.\n;system(pause);return 0;
}
#endif
下面来看一个继续读取的例子。假设程序要求用户提供5个高尔夫得分以计算平均成绩。如果用户输入非数字输入程序将拒绝并要求用户继续输入数字。可以看到可以使用cin输入表达式的值来检测输入是不是数字。程序发现用户输入了错误内容时应采取3个步骤。
1.重置cin以接受新的输入。
2.删除错误输入。
3.提示用户再输入。
请注意程序必须先重置cin然后才能删除错误输入。程序清单6.14演示了如何完成这些工作。
//6.14
#if 1
#includeiostream
using namespace std;
const int Max 5;int main()
{
//get dataint golf[Max];cout Please enter your golf scores.\n;cout You must enter Max rounds.\n;int i;for (i 0; i Max; i){cout round # i 1 : ;while (!(cin golf[i])){cin.clear(); //reset inputwhile (cin.get() ! \n) //使用cin.get()来读取行尾之前的所有输入从而删除这一行中的错误输入。continue; //get rid of bad inputcout Please enter a number: ;}}//calculate averagedouble total 0.0;for (i 0; i Max; i)total golf[i];//report resultscout total / Max average score Max rounds\n;system(pause);return 0;
}
#endif