两个很简单的问题帮忙看看谢谢
第一个问题:请输入星期几的第一个字母来判断一下是星期几,如果第一个字母一样,则继续输入第二个字母判断第二个字母。
以下是我写的程序。在第一个字母没有重复只用第一个字母就可以判断的时候是正确的。可是如果第一个字母判断不出来需要输入第二个字母的时候我的程序就不正确了请帮忙看看是什么问题。谢谢
#include <stdio.h>
main()
{
char c;
c = getchar();
if(c=='m') printf("today is Monday\n");
if(c=='w') printf("today is Wednsday\n");
if(c=='f') printf("today is Friday\n");
if(c=='s') //这里就出问题了。S和T都判断不出来
{
c = getchar();
if(c=='u') printf("today is Sunday\n");
if(c=='a') printf("today is Saturday\n");
}
if(c=='t')
{
c = getchar();
if(c=='u') printf("today is Tuesday\n");
if(c=='h') printf("today is Thursday\n");
}
}
第二个问题:
#include <stdio.h>
#include <cnnio.h>
main()
{
int color;
for(color=0; color<8; color++)
{
textbackground(color);
cprintf("this is the color %d\r\n",color);
cprintf("please press any key to continue\n");
getchar();
}
}
这段代码在编译的时候提示我无法打开cnnio.h文件请问应该怎么办?是不是TC2.0那里没有设置好啊?
问题点数:50、回复次数:4Top
1 楼tsrs(调试人生)回复于 2006-03-04 15:47:44 得分 20
第二个:
#include <conio.h>Top
2 楼duduhaha(三人行必有我师)回复于 2006-03-04 15:51:15 得分 30
#include <stdio.h>
int main(void)
{
char c;
c = getchar();
if(c=='m') printf("today is Monday\n");
if(c=='w') printf("today is Wednsday\n");
if(c=='f') printf("today is Friday\n");
if(c=='s') //这里就出问题了。S和T都判断不出来
{
fflush(stdin);
c = getchar();
if(c=='u') printf("today is Sunday\n");
if(c=='a') printf("today is Saturday\n");
}
if(c=='t')
{
fflush(stdin);
c = getchar();
if(c=='u') printf("today is Tuesday\n");
if(c=='h') printf("today is Thursday\n");
}
return 0;
}
fflush(stdin);的作用是清除掉输入字符后的回车.
给你看一段网上找的.
下面介绍一下标准流:
在程序启动时,会预先定义三个文本流(建立三个文件指针并指定值,但它们不需要显式地打开): 标准输入流(指针名为stdin)、标准输出流(stdout)和标准错误流(stderr)。stdin 通常与操作系统的标准输入连接,stdout 与操作系统的标准输出连接,stderr 通常直接与显示器连接,这说明stderr 不能重新定向(用于输出诊断信息)。在打开时,标准错误流不会完全缓冲;当且仅当流与交互的设备无联系时,标准输入和标准输出流才被完全缓冲(一种常见的方式,与输入设备联系时,比如需要键盘输入数据时,不等输出缓冲区写满就会刷新并显示在屏幕上,此时就不是完全缓冲)。
要把外存文件作为输入输出对象,一个可能方式是通过标准输入输出的重新定向,把标准流转接到指定文件。这样做能解决一些问题。但这种做法有很大局限性,因为这样形成的定向在程序执行期间不能改变。为能在程序中方便地根据需要使用各种文件,就必须利用标准库的文件操作函数(如fopen),通过为有关文件建立特定输入输出流的方式使用它们。
下面我们只研究stdin:
1 我们敲击键盘得到的是扫描码(扫描码有两个字节,低位字节是ASCⅡ码,高位字节是键位码),而不是ASCⅡ码。按键的扫描码会进入键盘的缓冲区。若程序有标准输入函数,接着键入 Enter后,连带着回车符一块把按键数据(扫描码转换ASCⅡ码形成文本流)送到输入缓冲区(stdin),标准输入函数接收数据后,会把未处理的数据留在输入缓冲区(stdin),这样的后果是随后的输入函数继续读入输入缓冲区中残留的数据。
如果残留在入缓冲区(stdin)中的数据内容无用,如上面例子的回车符 就需要要处理掉。可用 getchar()循环处理,或直接用fflush(stdin)清空缓冲区。
二.
turbo下应该为#include <conio.h>
而不是#include <cnnio.h>
你打错一个字母吧?include文件夹下可没有那个文件,呵呵.
Top
3 楼tsrs(调试人生)回复于 2006-03-04 15:53:46 得分 0
第一题:
你是输入s或者t以后按回车确定输入的吧?
这样的话进入if里边的getch()读取的就是回车,因此不会有显示。Top
4 楼chysxmy(chysxmy)回复于 2006-03-04 17:06:02 得分 0
谢谢问题解决了。又打错字母了。已经N次出先这种错误了。郁闷Top




