⑴ 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:等待超時,沒有可讀寫或錯誤的文件