|
查看: 1880|回复: 36
|
C/C++讨论区~~(会写C/C++的大大们请进来下下...)
[复制链接]
|
|
|
发表于 23-6-2008 12:32 PM
|
显示全部楼层
|
把你的switch放在while loop的外面。 |
|
|
|
|
|
|
|
|
|
|

楼主 |
发表于 24-6-2008 06:30 PM
|
显示全部楼层
原帖由 文世杰 于 23-6-2008 12:32 PM 发表 
把你的switch放在while loop的外面。
你在开玩笑啊?还是做来看看? |
|
|
|
|
|
|
|
|
|
|
发表于 24-6-2008 07:52 PM
|
显示全部楼层
|
|
|
|
|
|
|
|
|
|
发表于 25-6-2008 01:10 AM
|
显示全部楼层
原帖由 无言的豆腐 于 24-6-2008 06:30 PM 发表 
你在开玩笑啊?还是做来看看?
哇!你要人家帮你语气还这么恶劣哦?虽然他的答案并不正确。
你的问题出在,你每loop一次都把当时的答案(未完成计算的暂时答案)给cout出来。你应该在计算完后(loop结束后)才一次过cout答案出来。 而且你竟是在case里面的default里面print 句子?? 如果你的输入纯粹只有vowels的话,你将不会看到任何输出!!我也跟文世杰一样很好奇你在哪里读programming的。
另外,你缺乏一个terminate case, 也就是说你必须输入超过21个char才能终止你的while loop。
再另外,你可以把输入的char转换成全小写或全大写的,那就不必浪费资源去检查两个case了。
我个人从来不用cin和cout所以无法给你example code。
第二个问题,尝试使用getch()或者getche()吧。它们应该是stdio.h 或者 conio.h 里的 function,不完全是C++的手段,但是还是可以把工作完成的。 |
|
|
|
|
|
|
|
|
|
|
发表于 25-6-2008 09:16 AM
|
显示全部楼层
我也想知道你在哪里读programming的
'=' is for assignment
'==' is for comparison |
|
|
|
|
|
|
|
|
|
|
发表于 25-6-2008 11:42 AM
|
显示全部楼层
第一题五楼已经说明了。如果硬要用cin的话最好把input设成char[xxx],再用cin.getline()。详细的上网找找咯。
第二题的话其实用iostream就行了。在最后加上
cin.ignore();
cout<<" ress any key to continue...";
cin.get();
在大学园地版看过你,开学了啊?呵呵 |
|
|
|
|
|
|
|
|
|
|

楼主 |
发表于 25-6-2008 12:52 PM
|
显示全部楼层
|
|
|
|
|
|
|
|
|
|

楼主 |
发表于 25-6-2008 12:53 PM
|
显示全部楼层
|
|
|
|
|
|
|
|
|
|

楼主 |
发表于 25-6-2008 01:01 PM
|
显示全部楼层
|
|
|
|
|
|
|
|
|
|

楼主 |
发表于 25-6-2008 01:04 PM
|
显示全部楼层
|
|
|
|
|
|
|
|
|
|

楼主 |
发表于 25-6-2008 01:41 PM
|
显示全部楼层
|
|
|
|
|
|
|
|
|
|
发表于 25-6-2008 03:05 PM
|
显示全部楼层
嗯。。grammar也要改进啊 |
|
|
|
|
|
|
|
|
|
|
发表于 25-6-2008 04:29 PM
|
显示全部楼层
所谓的terminate case就是设定一个可以中断/停止接受输入,以判定使用者已经完成输入,然后你就可以执行需要的运算。一般上你可以检测如果使用者按下ENTER键,就表示他已经完成输入,你可以开始计算里面的consonents & vowels 了。
转换大/小写:- char to_Lower(char original)
- {
- if(original >= 'A' && original <='Z')
- return (char)(original + 32);
- else
- return original;
- }
复制代码- char to_Upper(char original)
- {
- if(original >= 'a' && original <='z')
- return (char)(original - 32);
- else
- return original;
- }
复制代码 察看ASCII表你就会发现英文字母大小写的代号相差32,所以转换很简单的。
一下附上一个很久以前我写的C Program,用来转换Lower case / Upper case的。因为我采用了gets(),所以当使用者按下ENTER键就自动形成terminate case(使用者完成输入)。我使用的是C++ Builder。- //---------------------------------------------------------------------------
- #include <vcl.h>
- #include <stdio.h>
- #include <conio.h>
- #pragma hdrstop
- //---------------------------------------------------------------------------
- #pragma argsused
- char char_to_lower(char);
- char char_to_upper(char);
- void string_to_lower(char *);
- void string_to_upper(char *);
- void main(void)
- {
- char string[255];
- clrscr();
- printf("Please enter a word: ");
- gets(string);
- string_to_lower(string);
- printf("Lower Case: %s\n", string);
- string_to_upper(string);
- printf("Upper Case: %s\n", string);
- printf("\nPress any Key to continue:");
- getch();
- }
- //---------------------------------------------------------------------------
- char char_to_lower(char original)
- {
- if(original >= 'A' && original <= 'Z')
- return (original + 32);
- else
- return original;
- }
- //---------------------------------------------------------------------------
- char char_to_upper(char original)
- {
- if(original >= 'a' && original <= 'z')
- return (original - 32);
- else
- return original;
- }
- //---------------------------------------------------------------------------
- void string_to_lower(char *original)
- {
- int length = strlen(original);
- for(int i=0; i<length; i++)
- {
- original[i] = char_to_lower(original[i]);
- }
- }
- //---------------------------------------------------------------------------
- void string_to_upper(char *original)
- {
- int length = strlen(original);
- for(int x=0; x<length; x++)
- {
- original[x] = char_to_upper(original[x]);
- }
- }
- //---------------------------------------------------------------------------
复制代码 |
|
|
|
|
|
|
|
|
|
|

楼主 |
发表于 25-6-2008 05:57 PM
|
显示全部楼层
|
|
|
|
|
|
|
|
|
|

楼主 |
发表于 25-6-2008 06:04 PM
|
显示全部楼层
原帖由 geekman 于 25-6-2008 04:29 PM 发表 
所谓的terminate case就是设定一个可以中断/停止接受输入,以判定使用者已经完成输入,然后你就可以执行需要的运算。一般上你可以检测如果使用者按下ENTER键,就表示他已经完成输入,你可以开始计算里面的consonents ...
讲真我可以说是完全看不懂你在写什么... 我是不是应该先学C Language才去学C++咧?
(我学院一开始就教C++了,所以我连C的基础都没有) |
|
|
|
|
|
|
|
|
|
|
发表于 25-6-2008 08:11 PM
|
显示全部楼层
我认为C和C++根本就是分不开的,C++是从C进化而来的,所以两者根本就不应该被当成完全不同的语言。
我的那个program只是使用了stdio.h和conio.h里面的function。printf() 相当于cout,只是它能够把输出的文字句子根据一定的格式(例如 %s 就是表示 string)来输出。而gets() 则是相当于cin,只是这个function 是专门用来读取string (char *) 的,而cin的功能比较广泛。getch() 则是单单读取一个char,它会一直等待直到使用者按下任何一个按键,所以常常被用来当作暂停program运行的方法,相当于cin.ignore()(如果你不打算处理它所读取的char)
你并不需要先熟悉C才来学习C++,C++已经可以做到C的一切,甚至更进一步拥有如Object-Oriented之类的C无法做到的功能。 |
|
|
|
|
|
|
|
|
|
|

楼主 |
发表于 25-6-2008 08:41 PM
|
显示全部楼层
原帖由 geekman 于 25-6-2008 08:11 PM 发表 
我认为C和C++根本就是分不开的,C++是从C进化而来的,所以两者根本就不应该被当成完全不同的语言。
我的那个program只是使用了stdio.h和conio.h里面的function。printf() 相当于cout,只是它能够把输出的文字句子 ...
o... 酱如果我要set一个terminated case的话,我只需要在我command的结尾写个cin.ignore()就可以咯?
不过你们老手写的program我都看不懂咧...  |
|
|
|
|
|
|
|
|
|
|
发表于 26-6-2008 11:09 AM
|
显示全部楼层
不,cin.ignore() 或 getch() 并不是terminate case。所谓的 terminate case 只是指一个中断或停止 loop (while loop, for loop) 的条件。一般上人们习惯在输入资料完毕时按下 ENTER 键,这个就可以被当作 terminate case 的条件。例如你要获取可能很长的资料,比如名字,其长度可能从十数个字母到数十个字母甚至上百个字母不等。你总不能规定每个人只能/一定要输入20个字母的名字吧?在这种情形之下,你只能设定一个合逻辑的最大值:
char name[255];
然后准许使用者输入介于1个字母到255个字母的名字。可是要如何知道使用者已经完成输入了呢?他的名字可能是15个字母,也可能是45个字母,可以是任何一个数目。所以我们就要侦测一个条件,也就是当使用者按下 ENTER 键,就代表他已经完成输入。- char name [255];
- int count = 0;
- bool is_complete = false;
- char input;
- while (count < 255 && is_complete == false)
- {
- input = getche(); //相当于 cin >> input;
- switch(input)
- {
- case 13: is_complete = true; //13是 ENTER (Carriage Return) 的 ASCII 代码
- break;
- default: name[count] = input;
- }
- count++; //相当于count = count + 1;
- }
复制代码 在上面的例子中,case 13: 就是 terminate case, 而 is_complete = true; 就是让它中断 loop 的关键。因为这个 while loop 的条件是 while count is less than 255 AND is_complete is equal to 'false'。当发现使用者的输入是 ENTER 键时,is_complete 就被设定为 true,从而中断 while loop 让程式继续之后的运算(或者你可以使用 break 或者 continue 来中断或跳过一部分的 loop 运算)。
这应该能让你明白了吧?不明白也不用紧,你现在还是初学者,对C/C++语言的了解还不够,以后你就会慢慢了解的了。
在结尾放一个 getch() 或 cin.ignore() 的作用只是让program 暂停运作,等待使用者按下一个按键罢了,也就是 “Press a key to continue...“ 的作用。 |
|
|
|
|
|
|
|
|
|
|

楼主 |
发表于 26-6-2008 11:38 PM
|
显示全部楼层
原帖由 geekman 于 26-6-2008 11:09 AM 发表 
不,cin.ignore() 或 getch() 并不是terminate case。所谓的 terminate case 只是指一个中断或停止 loop (while loop, for loop) 的条件。一般上人们习惯在输入资料完毕时按下 ENTER 键,这个就可以被当作 terminat ...
哦,谢啦,大概看得懂你在写什么了,也学到怎样用array和boolean(好像是酱写,没错吧?)来做terminate case了,谢谢哦!  |
|
|
|
|
|
|
|
|
| |
本周最热论坛帖子
|