⑴ c语言程序设计中如何清屏
如果是TC环境,直接使用clrscr(); 函数就好,需要头文件#include <conio.h>。
其他环境没有clrscr(); 函数,可以使用system("cls");,需要头文件#include <stdlib.h>。
⑵ C语言中的clrscr()函数有什么作用
clrscr() 顾名思义 “清屏幕”函数。 要头文件 #include <conio.h>
clr -- clearing 清
scr -- screen 屏幕
这是非常非常古老的Borland C 里的函数。现在的编译器 未必支持。
现在的 windows 系统 可用 system("cls"); 代替它。
⑶ C语言如何在运行时打开音乐
有很多方法,不过我觉得由于脱离硬件的软件编程没什么意义。所以用定时器来实现比较简单。对定时器设定初始值,从端口输出频率不同的方波到蜂鸣器,可以得到不同的音阶。例如do,就是对定时器设置初值0xe9fb。相应的标准音阶都相似,有专门的音阶标准。
提供个例子,希望对你有用:
/*运行时,键入音阶序号(0~6),屏幕即显示该音阶之下的音名及频率对照表,然后,第一遍演奏七个基本音符C?D?E?F?G?A?B,第二遍演奏包含升降音在内的十二个音符C?C+?D?D+?E?F?F+?G?G+?A?A+?B,每演奏一个音符均有图标同步指示*/
#include"conio.h"
#include"dos.h"
main()
{ int i,k;
long j;
static char m[]="C C+ D D+ E F F+ G G+ A A+ B"
;
static unsigned n[][12]={{65,69,73,78,82,87,
92,98,103,110,116,123},
{131,139,147,156,165,175,185,196,208,220,233,
247},
{262,277,294,311,330,349,370,392,415,440,466,
494},
{523,554,587,622,659,698,740,784,831,880,932,
988},
{1046,1109,1175,1244,1318,1397,1480,1568,1661,
1760,1865,1976},
{2039,2160,2288,2422,2565,2716,2877,3047,3226,
3417,3618,3832},
{4058,4297,4551,4819,5104,5405,5724,6061,6419,
6798,7166,7625}};
redo1:clrscr();
gotoxy{22,13);printf("请键入音阶序号(0~ 6,-1退出):");scanf("%d,&k);
if(k<-1||k>6)goto redo1;
while (k!=-1)
{ clrser();gotoxy(26,10);printf("C语言音名及频
率对照表(音阶%d)",k);
gotoxy(8,12);printf("音名 %s,m);
gotoxy(8,13);printf("频率");
for (i=0;i<=11;i++)
{ gotoxy(14+5*i,13);printf("%d",n[k])
;
} for (i=0;i<11;i+=2)
{ if (i==6)i--;
sound(n[k]);
gotoxy(14+5*i,15);puts("↑");
for (j=0;j<1800000;j++);
} for (i=0;i<=11;i++)
{ sound(n[k]);
gotoxy(14+5*i,16);puts("↑");
for (j=0;j<900000;j++);
} nosound();getch();
redo2:clrscr();
gotoxy(22,13);printf("请键入音阶序号0~ 6,-1~ 退出):");scanf("%d",&k);
if(k<=1 || k>6) goto redo2;
}
}
⑷ 怎样用C语言编写一个DOS下的中断服务程序
DOS中断中断属于汇编层面的内容,可以用asm内联实现:
在windows visual c++下用__asm关键字。
在gcc下用__asm__宏即可。
示例(vc):
#include<stdio.h>
intmain()
{
__asmint3h;
return0;
}
这样就可以在C里面写入汇编代码了。
__asm关键字用于调用内联汇编程序,并且可在 C 或 C++ 语句合法时出现。它不能单独出现。必须后跟汇编指令、一组在大括号中的命令、或者至少一对空大括号。术语 “__asm块”在此处指任何命令或命令组,不管是否在大括号内。
如果不与大括号一起使用,则__asm关键字表示此行的其余部分是一条汇编语言语句。如果与大括号一起使用,则该关键字表示大括号之间的每一行都是一条汇编语言语句。为了与早期版本兼容,_asm是__asm的同义词。
由于__asm关键字是语句分隔符,因此您可以将程序集指令放在同一行中。
在 Visual C++ 2005 之前,指令
__asm int 3
不会导致在使用/clr编译时生成本机代码;编译器会将该指令转换为 CLR 中断指令。
__asm int 3现在将导致为函数生成本机代码。如果您希望函数导致代码中出现断点,还希望将函数编译为 MSIL,请使用__debugbreak。
⑸ 电脑里面发出嘀嘀声的是什么,如用软件何控制
可以用Turbo C里的sound(), nosound()
在TC中能否如何音乐编程?
发表时间:2005年4月19日16:49:53
本文提供一个C语言音乐的音阶?音名及频率速查程序?
运行时,
键入音阶序号(0~6),屏幕即显示该音阶之下的音名及频率对照表
,然后,第一遍演奏七个基本音符C?D?E?F?G?A?B,第二遍演奏
包含升降音在内的十二个音符C?C+?D?D+?E?F?F+?G?G+?
A?A+?B,每演奏一个音符均有图标同步指示?本程序既可作为C语
言音乐编程的辅助工具,也对一般发声采集频率数据具有参考作用?
程序在Turbo C2.0下通过?
#include"conio.h"
#include"dos.h"
main()
{ int i,k;
long j;
static char m[]="C C+ D D+ E F F+ G G+ A A+ B"
;
static unsigned n[][12]={{65,69,73,78,82,87,
92,98,103,110,116,123},
{131,139,147,156,165,175,185,196,208,220,233,
247},
{262,277,294,311,330,349,370,392,415,440,466,
494},
{523,554,587,622,659,698,740,784,831,880,932,
988},
{1046,1109,1175,1244,1318,1397,1480,1568,1661,
1760,1865,1976},
{2039,2160,2288,2422,2565,2716,2877,3047,3226,
3417,3618,3832},
{4058,4297,4551,4819,5104,5405,5724,6061,6419,
6798,7166,7625}};
redo1:clrscr();
gotoxy{22,13);printf("请键入音阶序号(0~ 6,-1退
出):");scanf("%d,&k);
if(k<-1||k>6)goto redo1;
while (k!=-1)
{ clrser();gotoxy(26,10);printf("C语言音名及频
率对照表(音阶%d)",k);
gotoxy(8,12);printf("音名 %s,m);
gotoxy(8,13);printf("频率");
for (i=0;i<=11;i++)
{ gotoxy(14+5*i,13);printf("%d",n[k][i])
;
} for (i=0;i<11;i+=2)
{ if (i==6)i--;
sound(n[k][i]);
gotoxy(14+5*i,15);puts("↑");
for (j=0;j<1800000;j++);
} for (i=0;i<=11;i++)
{ sound(n[k][i]);
gotoxy(14+5*i,16);puts("↑");
for (j=0;j<900000;j++);
} nosound();getch();
redo2:clrscr();
gotoxy(22,13);printf("请键入音阶序号0~ 6,-1~ 退
出):");scanf("%d",&k);
if(k<=1 || k>6) goto redo2;
} }
⑹ argument list syntax error 错误帮忙解决下ma
这个程序错误很多,而且程序不完整,所以无法完全修改,可修正的错误修改如下:
//---------------------------------------------------------------------------
#include<stdio.h>
#include<stdlib.h>
#include<ctype.h>
#include<string.h>
#define N 60
typedef struct stud /*************注意这里*****************/
{char id[10];
char name[10];
int yuwen;
int shuxue;
int yingyu;
int totalscore;
}stud;
void Class_term(char filename[20])
{char class[6],term[4],geshi[4]={".txt"};
printf("\n input class name and term : ");
scanf("%s",class);
scanf("%s",term);
strcat(class,"_");
strcat(class,term);
strcat(class,geshi);
strcpy(filename,class);
}
int Inputscore(stud st[],int n)
{int i=0;
char sign='Y',x[10];
while(sign!='n'||sign!='N'&&i<n)
{printf("\tstudent\'s id:");
scanf("%s",st[i].id);
printf("\tstudent\'s name:");
scanf("%s",st[i].name);
printf("\tstudent\'s yuwen:");
scanf("%d",&st[i].yuwen);
printf("\tstudent\'s shuxue:");
scanf("%d",&st[i].shuxue);
printf("\tstudent\'s yingyu:");
scanf("%d",&st[i].yingyu);
get(x);
st[i].totalscore=st[i].yuwen+st[i].shuxue+st[i].yingyu;
printf("\n input any more records?(Y/N)");
scanf("%c",&sign);
i++;
}
return(i);
}
void AddtoText(stud st[],int n,char filename[20])
{
}
int inputfromText(stud st[],char filename[20])
{
}
void WritetoTest(stud st[],int n,char filename[20])
{
}
int Queryrecord(stud st[], int n, char num[10])
{
}
int Deleterecord(stud st[],int n,int i)
{
}
int menu_select()
{ char c;
do{
clrser();
printf("\t****Students Grade Management System****\n");
printf("\t |1.Creat Score File |\n");
printf("\t |2.Input class Records |\n");
printf("\t |3.Delete a Record |\n");
printf("\t |4.Query a Record |\n");
printf("\t |5.Revise a Record |\n");
printf("\t |0.Quit |\n");
printf("\t********************************************\n");
printf("\tGive your Choice(0-5): ");
c=getchar();
}while(c<'0'||c>'5');
return(c-'0');
}
void Add_class_term_score()
{int number,num;
stud st[N];
char filename[20];
void Class_term(char filename[20]);
num=N; /*************注意这里*****************/
printf("ji ge tongxue cheng ji \n");
number=Inputscore(st,num); /*************注意这里*****************/
AddtoText(st,number,filename); /*************注意这里*****************/
}
void Delete_a_record()
{
}
void Query_a_record()
{
}
void Revise_a_record()
{
}
void main()
{int n=1;
char password[8]="abcdefgh",password1[8];
do
{printf("\t qing shuru mima(8wei): ");
scanf("%s",password1);
if(strcpy(password,password1)==0) break;
else
{if(n>3){printf("\t\t ni wu quan shiyong gai xitong!");exit(1);}
printf("\t mima bu zhengque ,qing chongxin shuru !");
n++;
}
}while(n<4);
printf("\t\t huanying shiyong xuesheng chengji guanli xitong\n");
for(;;)
{switch(menu_select())
{case 1: creatfile(); break;
case 2: Add_class_term_score(); break;
case 3: Delete_a_record(); break;
case 4: Query_a_record(); break;
case 5: Revise_a_record(); break;
case 0: printf("\tHave a Good Luck,Bye-bye!\n");
system("pause");
exit(0);
}
}
}
//---------------------------------------------------------------------------
⑺ c语言中clrcsr()是什么意思
就是把你运行到这句函数时前面的内容全部清空,比如放在函数最后,那么你这个函数,包括以前的运行结果全部清空,放在函数的定义函数后面,那么就只把以前的清空,只看见现在这个函数的结果,看看能懂不
⑻ c语言中select函数的作用
在编程的过程中,经常会遇到许多阻塞的函数,好像read和网络编程时使用的recv, recvfrom函数都是阻塞的函数,当函数不能成功执行的时候,程序就会一直阻塞在这里,无法执行下面的代码。这是就需要用到非阻塞的编程方式,使用selcet函数就可以实现非阻塞编程。
selcet函数是一个轮循函数,即当循环询问文件节点,可设置超时时间,超时时间到了就跳过代码继续往下执行。
Select的函数格式:
int select(int maxfdp,fd_set *readfds,fd_set *writefds,fd_set *errorfds,struct timeval*timeout);
select函数有5个参数
第一个是所有文件节点的最大值加1,如果我有三个文件节点1、4、6,那第一个参数就为7(6+1)
第二个是可读文件节点集,类型为fd_set。通过FD_ZERO(&readfd);初始化节点集;然后通过FD_SET(fd, &readfd);把需要监听是否可读的节点加入节点集
第三个是可写文件节点集中,类型为fd_set。操作方法和第二个参数一样。
第四个参数是检查节点错误集。
第五个参数是超时参数,类型为struct timeval,然后可以设置超时时间,分别可设置秒timeout.tv_sec和微秒timeout.tv_usec。
然后调用select函数,用FD_ISSET()函数判断节点是否可读写。返回值不为0表示可读写,为0表示不可读写。select函数的返回值为是一个整数,表示有几个节点可读写。
先说明两个结构体:
第一,struct fd_set可以理解为一个集合,这个集合中存放的是文件描述符(filedescriptor),即文件句柄,这可以是我们所说的普通意义的文件,当然Unix下任何设备、管道、FIFO等都是文件形式,全部包括在内,所以毫无疑问一个socket就是一个文件,socket句柄就是一个文件描述符。fd_set集合可以通过一些宏由人为来操作,比如清空集合FD_ZERO(fd_set *),将一个给定的文件描述符加入集合之中FD_SET(int ,fd_set*),将一个给定的文件描述符从集合中删除FD_CLR(int,fd_set*),检查集合中指定的文件描述符是否可以读写FD_ISSET(int ,fd_set* )。
第二,struct timeval是一个大家常用的结构,用来代表时间值,有两个成员,一个是秒数,另一个是毫秒数。
具体解释select的参数:
int maxfdp是一个整数值,是指集合中所有文件描述符的范围,即所有文件描述符的最大值加1,不能错!在Windows中这个参数的值无所谓,可以设置不正确。
fd_set * readfds是指向fd_set结构的指针,这个集合中应该包括文件描述符,我们是要监视这些文件描述符的读变化的,即我们关心是否可以从这些文件中读取数据了,如果这个集合中有一个文件可读,select就会返回一个大于0的值,表示有文件可读,如果没有可读的文件,则根据timeout参数再判断是否超时,若超出timeout的时间,select返回0,若发生错误返回负值。可以传入NULL值,表示不关心任何文件的读变化。
fd_set * writefds是指向fd_set结构的指针,这个集合中应该包括文件描述符,我们是要监视这些文件描述符的写变化的,即我们关心是否可以向这些文件中写入数据了,如果这个集合中有一个文件可写,select就会返回一个大于0的值,表示有文件可写,如果没有可写的文件,则根据timeout参数再判断是否超时,若超出timeout的时间,select返回0,若发生错误返回负值。可以传入NULL值,表示不关心任何文件的写变化。
fd_set * errorfds同上面两个参数的意图,用来监视文件错误异常。
struct timeval * timeout是select的超时时间,这个参数至关重要,它可以使select处于三种状态,第一,若将NULL以形参传入,即不传入时间结构,就是将select置于阻塞状态,一定等到监视文件描述符集合中某个文件描述符发生变化为止;第二,若将时间值设为0秒0毫秒,就变成一个纯粹的非阻塞函数,不管文件描述符是否有变化,都立刻返回继续执行,文件无变化返回0,有变化返回一个正值;第三,timeout的值大于0,这就是等待的超时时间,即select在timeout时间内阻塞,超时时间之内有事件到来就返回了,否则在超时后不管怎样一定返回,返回值同上述。
返回值:返回状态发生变化的描述符总数。
负值:select错误
正值:某些文件可读写或出错
0:等待超时,没有可读写或错误的文件