注册 登录
编程论坛 C++教室

一个初学的习题

ReadingLi 发布于 2007-08-06 13:38, 1151 次点击

初学C++,刚自学了一章,做后面的习题不会了,主要内容是实现:向用户提问"现在正在下雨吗?(y/n)",输下Y则显示"现在下",输入N则显示"不下",我翻前面的书,要求输的的全是数字,我用cin,和if还会弄,现在变成Y和N了就不会了,想到了用枚举,还是总不对,以下是我的程序,看是哪的问题啊?
#include <iostream>
using namespace std;
enum weather {Y,N};
void main ()
{
weather a;
int b;
cout <<"现在正在下雨吗?(Y/N): ";
cin>>b;
a=(weather)b;
if (a==Y)

{ cout <<"现在正在下雨!"<<endl;}


}

19 回复
#2
wangweicoin2007-08-06 15:16

不用去用枚举,你的枚举中,enum weather {Y,N};程序会自动将Y和N附上默认值(Y=0,N=1)如果你在b的输入中输入的是Y和N就不可能和之前的枚举默认值相同,因此除非你用0代表下雨,用1代表不下;否则就会有问题。
不要用枚举了:
#include <iostream>
using namespace std;
void main ()
{
int b,Y,N;
cout <<"现在正在下雨吗?(Y/N): ";
cin>>b;
if (b==Y)
{ cout <<"现在正在下雨!"<<endl;}
}






#3
ReadingLi2007-08-06 15:41
回复:(wangweicoin)不用去用枚举,你的枚举中,enu...

谢谢,你讲的枚举我明白了,用的给的程序可以做到要求的效果,可是我要把原题的要求都加进去,结果就不成了,我输入什么都是正在下雨啊?
#include <iostream>
using namespace std;
void main ()
{
int b,Y,N;
cout <<"现在正在下雨吗?(Y/N): ";
cin>>b;
if (b==Y)

{ cout <<"现在正在下雨!"<<endl;}
else if (b==N)
{cout <<"现在没有下雨!"<<endl;}
else
cout <<"现在正在下雨吗?(Y/N): ";
}
是我的IF语句不对吗,可我是看书上写的啊?

#4
aipb20072007-08-06 16:23
你不知道char类型吗?

类型错误啊,int怎么可以接受字符呢?
#5
medicihophy2007-08-06 16:32

#include <iostream>
using namespace std;
void main ()
{
int b,Y,N;
//cout <<"现在正在下雨吗?(Y/N): ";
cin>>b;
//if (b==Y)

//{ cout <<"现在正在下雨!"<<endl;}
//else if (b==N)
//{cout <<"现在没有下雨!"<<endl;}
//else
//cout <<"现在正在下雨吗?(Y/N): ";
cout<<b<<endl;
cout<<Y<<endl;
cout<<N<<endl;
}

乱定义乱输入,定义没有赋值的后果!!!!

#6
wangweicoin2007-08-06 16:37

对不起,刚才是我错了,你再试试:

把int b,Y,N; 改成 char b;
把if(b==Y) 改成 if(b="Y")
把else if(b==N) 改成 else if(b=="N")

#7
medicihophy2007-08-06 16:38

字符是'Y' 'N'再改!而且这里的int Y ,N也不需要了!

[此贴子已经被作者于2007-8-6 16:39:55编辑过]

#8
leng2007-08-06 21:48
#include<iostreat.h>
int main()
{
char ch;
cout <<"现在正在下雨吗?(Y/N): ";
cin>>ch;
if(ch=='Y')
cout<<"正在下";
else
cout<<"不下";
return 0;
}
可以不呀?
#9
ReadingLi2007-08-07 12:55

哈哈,谢谢大家,通过你们的讲解终于弄出来了.
#include <iostream>
using namespace std;
void main ()
{
char b;
cout <<"现在正在下雨吗?(Y/N): ";
cin>>b;
if (b=='y')

{ cout <<"现在正在下雨!"<<endl;}
else if (b=='n')
{cout <<"现在没有下雨!"<<endl;}
else
cout <<"现在正在下雨吗?(Y/N): ";
}
不过还有个小问题,在if(b=='y')的时候, y , "y" , 'y' 这三个的区别是什么啊?

#10
aipb20072007-08-07 12:59
y是个变量,前提是你定义了,具体类型要看你定义的什么

'y'字符字面量,字符是内置类型中的char类型

“y”字符串字面量,对应const char*类型

-----------------------------------------------------------
LZ很多基础都不懂,其实应该多看看书,光这样问,解答,你也只会云里雾里。
#11
ReadingLi2007-08-07 13:07
OK,谢了BZ了,一定先多看看书,呵呵
#12
Maltase2007-08-07 22:21
今天刚学到这些内容
{
char b,y,n;
printf("现在正在下雨吗?(y/n)");
scanf("%c",&b);
if(b=='y'||b=='n')
{
if(b=='y')
printf("现在正在下雨\n");
else
printf("现在没有下雨\n");
}
else
printf("请输入y与n\n");
}

其实这样也应该没错吧

[此贴子已经被作者于2007-8-7 22:23:25编辑过]

#13
ReadingLi2007-08-08 10:48
试了你的程序,也可以啊,呵呵,就是我还没学到哪,scanf()那个看不懂,主要是()里的,等学到了再研究下了
#14
Maltase2007-08-08 18:59
%c是输出一个字符,对应参数应该是一个字符的
scanf是输入,在之前定义过char,b
#15
wingyip2007-08-08 19:23
不明白樓主為什么要
a=(weather)b;這一句話是什么意思?
其實用char 也可以啊。
#16
野比2007-08-08 20:46

#include <stdio.h>
void main(){
int b=0;
scanf("%c",&b);
(b==89||b==121)?printf("正在下雨!"):printf("在下空气...");
}

#17
Maltase2007-08-08 21:48
楼上的。。这个输入的是按照ASCII码来判断的吗?
#18
ReadingLi2007-08-08 21:56
回复:(wingyip)不明白樓主為什么要a=(weather)b;這...

是啊,刚开始不会啊,想了半天就弄了个枚举,后来到这里朋友们才说用char 就行了,现在好多了,呵呵

#19
Maltase2007-08-08 23:58
都是这几天学的内容。。。我倒还记得点。。过几天就忘了。。
#20
野比2007-08-09 20:37

所谓的int, char, ASCII..当你输入单一字符(如'y'时)都是一样的...
它们都是以ASCII值存放在内存中的...(除非你输入数字字符..)
关键在于你怎么运用输入得到的这个值了...
在我的例子里..
int b=0;
scanf("%c",&b);
b是整数, 而输入时是作为char字符对待的...
后面判断又是作为整数对待...

1