C++中怎样识别输入的是空行??
下面是有我编写的有问题的代码:#include"stdafx.h"#include<iostream>#include<string>#include<cctype>co...
下面是有我编写的有问题的代码:
#include "stdafx.h"
#include <iostream>
#include <string>
#include <cctype>
const double M_sum = 10000;
using namespace std;
struct donation
{
char name[20];
double sum;
};
int _tmain(int argc, _TCHAR* argv[])
{
int n;
cout<<"Enter number of donation: ";
cin>>n;
donation *temp = new donation[n];
int i;
for (i=0; i<n; i++)
{
cout<<"Enter name of patrons:\n";
cin>>temp[i].name ;
if (strlen(temp[i].name)==0) //问题:我的主要目的是:如果输入为空,则执行以下代码
strcpy(temp[i].name, "none");
cout<<"Enter sum:\n";//但为什么程序接下来不运行此行?程序的意思是不希望我输入空行,那样就没有达到我预期的效果
cin>>temp[i].sum;
}
cout<<"Grand Patrons:\n";
for (int j = 0; j<i; j++)
{
if (temp[j].sum > M_sum)
cout<<temp[j].name <<endl;
}
cout<<"Another:\n";
for (int j = 0; j<i; j++)
{
if (temp[j].sum < M_sum)
cout<<temp[j].name <<endl;
}
return 0;
}
谢谢,刻意说得再简单一点吗?
我的意思是,你说的那些方法我还没有学到,面向行的输入会好一些吗?
请再给我提供一些其他的方案吧 展开
#include "stdafx.h"
#include <iostream>
#include <string>
#include <cctype>
const double M_sum = 10000;
using namespace std;
struct donation
{
char name[20];
double sum;
};
int _tmain(int argc, _TCHAR* argv[])
{
int n;
cout<<"Enter number of donation: ";
cin>>n;
donation *temp = new donation[n];
int i;
for (i=0; i<n; i++)
{
cout<<"Enter name of patrons:\n";
cin>>temp[i].name ;
if (strlen(temp[i].name)==0) //问题:我的主要目的是:如果输入为空,则执行以下代码
strcpy(temp[i].name, "none");
cout<<"Enter sum:\n";//但为什么程序接下来不运行此行?程序的意思是不希望我输入空行,那样就没有达到我预期的效果
cin>>temp[i].sum;
}
cout<<"Grand Patrons:\n";
for (int j = 0; j<i; j++)
{
if (temp[j].sum > M_sum)
cout<<temp[j].name <<endl;
}
cout<<"Another:\n";
for (int j = 0; j<i; j++)
{
if (temp[j].sum < M_sum)
cout<<temp[j].name <<endl;
}
return 0;
}
谢谢,刻意说得再简单一点吗?
我的意思是,你说的那些方法我还没有学到,面向行的输入会好一些吗?
请再给我提供一些其他的方案吧 展开
1个回答
展开全部
cin>>temp[i].name ; 会自动滤过空格,
你可以用这种方式防止空格背过滤掉:
cin.unsetf( ios::skipws );
试试看哈,放在这个语句的前面。
也可以用getline来代替。
template<class CharType, class Traits, class Allocator>
basic_istream<CharType, Traits>& getline(
basic_istream<CharType, Traits>& _Istr,
basic_string<CharType, Traits, Allocator>& _Str
);
你可以用这种方式防止空格背过滤掉:
cin.unsetf( ios::skipws );
试试看哈,放在这个语句的前面。
也可以用getline来代替。
template<class CharType, class Traits, class Allocator>
basic_istream<CharType, Traits>& getline(
basic_istream<CharType, Traits>& _Istr,
basic_string<CharType, Traits, Allocator>& _Str
);
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询