當前位置:首頁 » 編程語言 » 記事本編程c語言
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

記事本編程c語言

發布時間: 2023-04-18 17:47:21

⑴ 如何用c語言做記事本

#include<stdio.h>
#include<襲運malloc.h>
#include<string.h>
#include<stdlib.h>
#include<ctype.h>
#define NULL 0
#define MAX 100

typedef struct lnode{

char date[MAX]; //存放數據
struct lnode * prior ; //前驅
struct lnode * next ; //昌檔後繼
int number ; //記錄一個節點的字元數!如果是頭節點就記錄他的耐禪亂節點個數
int quese ; //記錄節點在鏈表中的位置

}lnodetype;

lnodetype * l ; //設置兩個全局變數,分別是頭節點指針和尾節點指針
lnodetype * end ;

//**********這個函數是用來初始化的**********//
int iniatelist (lnodetype ** l , lnodetype ** end)
{

(*l) = (lnodetype *)malloc (sizeof (lnodetype) ) ;
if ( (*l) == NULL )
{

printf ("沒有隻夠的內存空間!程序即將退出!");
return 0 ;

}

(*l)->prior =(*l)->next = NULL ; //這是雙鏈表
(*l)->number = (*l)->quese = 0;
(*end) = (*l) ;

printf ("程序初始化完畢!");
return 0;

}

//**********這個函數是用來建立節點,並且插入元素的**********//
int link(lnodetype ** l, lnodetype ** end)
{

lnodetype *s ;
s = (lnodetype *)malloc ( sizeof (lnodetype) ) ;
if ( s == NULL ){

printf ("內存空間不夠,程序即將退出!") ;
return 0 ;

}

(*end)->next = s ;
s->prior = (*end) ;
(*end) = (*end)->next ;
(*l)->number++ ; //增加一個節點,頭節點的number就加1
s->quese = (*l)->number ; //這個是記錄節點在鏈表中的位置

printf ("%d行", s->quese ) ; //這個是節點在整個鏈表中的位置
gets(s->date) ;
s -> number = strlen(s->date) ;
return 0 ;

}

//**********這個是列印鏈表的函數**********//
int prin (lnodetype ** l, lnodetype ** end)
{

lnodetype * p ;
int i ;
int j = 0;
int couter = (*l)->number ;
p = (*l)->next ;

for (i=0; i < couter; i++){

printf ( "%d行" , i+1 ) ;
j = 0;
while ( ( p->date[j]>='a' && p->date[j]<='z') ||
(p->date[j]>='A' && p->date[j]<='z') ||
p->date[j]>='0' && p->date[j]<='9')
{

printf ( "%c" , p->date[j] ) ;
j++ ;

}
printf ("n") ;
p = p->next ;

}

return 0 ;

}

//*********這個查找和編輯相應行的函數**********//
int search (lnodetype ** l, lnodetype ** end )
{

int number ;
scanf ("%d" , &number) ;
int i ;
lnodetype * p ;
p = (*l)->next ;

for ( i=0; i<number-1; i++ )
p = p->next ;

printf ("%d行" , number ) ;
gets (p->date) ;
return 0 ;

}

//**********這個是在文本文件里搜索字元串的函數**********//
int searchstr(lnodetype ** l , lnodetype ** end)
{

char ptr[100] ;
int arrycouter ;
int mystrcmp( char *, char * , int ) ;

printf ( "ok!現在輸入你查找的字元串!" ) ;
scanf ( "%s" , ptr ) ;
arrycouter = strlen (ptr) ;
lnodetype * s ;
s = (*l)->next ;
char * p ;

int i = 1 ;
int couter = 0 ;
int number = (*l)->number ;
p = (char *)s->date ;

while ( i && number ){

// i=1是,證明沒有找到,向第二個節點繼續尋找

while ( i && ( ( (*p >= 'a') && (*p <= 'z') ) || ( (*p >= 'A') && (*p <= 'Z') ) ) ){

i = mystrcmp ( p , ptr , arrycouter );

if ( i == 1 ){

printf ("字元串已經在第%d行,第%d個字元開始,",s->quese, couter+1 );
i = 0 ;
}
else
{
p++ ;
couter++;
i = 1 ;
}

}

s = s->next ;
p = (char *)s->date ;
number -- ;

}

if ( i == 1 )
printf ("字元串在本文檔中不存在!");
return 0 ;

}

//**********(1)這個函數是用來實現退出不保存功能的**********//
int exitunsave(lnodetype ** l, lnodetype ** end)
{

lnodetype * s ;
while( (*l) != (*end) ){ //如果不保存的話,最好是把節點的空間都釋放,節省空間

s = (*end) ;
(*end) = (*end)->prior ;
free( s ) ;

}

return 0 ;

}

//**********(2)這個函數是用來實現退出但保存功能的**********//
int quitandsave( lnodetype ** l , lnodetype ** end )
{

FILE * fp ;
char ch ;
char filename[20] ;
lnodetype * p;
int i ;
int j ;
int couter = (*l)->number ;

p = (*l)->next ;

printf ("請輸入文件名:") ;
scanf ("%s" , filename ) ;

if ( (fp = fopen( filename , "w" )) == NULL ){

printf ("文件不能打開!n");
return 0 ;

}

for ( i=0; i<couter; i++ ){ //有幾個節點就進行多少次的存貯

ch = p->date[0] ;
j = 1 ;

while (ch != '\0'){

fputc (ch , fp) ;
ch = p->date[j] ;
j++ ;

}

p = p->next ;
fputc ( '#' , fp ) ; //注意在每個節點的後面加上結束的符號

}

fputc ( '@' , fp ) ; //整個文件關閉的標志
fclose ( fp ) ; //注意關閉文件,
return 0 ;

}
//**********由於庫函數比較字元串提供的功能不滿足要求,故自己寫了一個**********/
int mystrcmp( char * p ,char * sour ,int number )
{

while ( number && (*p) == (*sour) &&
( ( (*p >= 'a') && (*p <= 'z') ) || ( (*p >= 'A') && (*p <= 'Z') ) )){

p++ ;
sour++ ;
number-- ;

}

if ( number == 0 )
return 1 ;
else
return 0 ;

}
//**********這個函數是用來實現統計字元串功能的**********//
int coutword(lnodetype ** l , lnodetype ** end)
{ //考慮到只統計一行的單詞沒有意義,故統計整個文本

int yes = 1 ; //這個是進入單詞的標志
int no = 0 ; //在單詞外面的時候的標志
int i , j ,inaword ,count = 0 ;
inaword = no ;
lnodetype * s = (*l)->next ;

for (j=0; j<(*l)->number; j++){

for ( i=0; (s->date[i]>='a' && s->date[i]<='z') ||
(s->date[i]>='A' && s->date[i]<='z') ||
(s->date[i]>='0' && s->date[i]<='9' ) ||
(s->date[i]==' '); i++ )
{

if ( s->date[i] == ' ' )
inaword = no ;
else
if ( inaword == no )
{
inaword = yes ;
count++ ; //計算單詞
}

}

s = s->next ;
inaword = 0 ; //注意這里,把標志置為0了!

}

printf ( "n文本一共有 %d 行" , (*l)->number ) ;
printf ("n此文本一共有 %d 個單詞!" , count ) ;

return count ;

}
//**********這個函數是用來實現計算文本行數功能的**********//
int linecouter(lnodetype ** l , lnodetype ** end )
{

int couter ;
couter = (*l)->number ;
return couter ;

}

//**********這個函數是整和一上所有功能的菜單函數**********//
int editmenu(lnodetype ** l , lnodetype ** end )
{

char choice ;
char * p = "cls" ;
int i = 1 ; //這兩個變數是用來控制循環的
int j= 1 ;
system (p) ;
prin (&(*l) , &(*end)) ;

while (j){

printf ("*********************************** e: 編輯相應行 *************************************n") ;
printf ("*********************************** s: 搜索字元串 *************************************n") ;
printf ("*********************************** t: 統計單詞個數 ***********************************n") ;
printf ("*********************************** q: 退出編輯 ***************************************n") ;

scanf("%c",&choice);
scanf("%c" , &choice) ; //????莫名其妙的問題,非要兩個請求輸入語句才肯停下來!
switch (choice)
{
case 'e' : {
i = 1 ;
while (i)
{
search( &(*l) , &(*end) );
system (p) ;
prin( &(*l) , &(*end) ) ;
printf ("n1 繼續編輯 0 結束編輯n") ;
scanf ("%d" , &i) ;

}

}

break;
case 's' : {

i = 1 ;
while (i)
{
searchstr( &(*l) , &(*end) );
getchar();
getchar();
system (p) ;
prin( &(*l) , &(*end) ) ;
printf ("n1 繼續搜索 0 結束搜索n") ;
scanf ("%d" , &i) ;

}

}
break;
case 't' : {

coutword ( &(*l) , &(*end) ) ;
getchar() ;

}break;

default : return 0 ;

}

system (p) ;
prin( &(*l) , &(*end) ) ;
printf ("n1 回到編輯菜單 0 結束編輯n") ;
scanf ("%d" , &j) ;
if (j == 1)
system (p) ;
else
return 0 ;

}

return 0 ;
}

//**********實現第一個模塊:新建空白文檔**********//
int newtext( lnodetype ** l ,lnodetype ** end )
{

printf ( "新文本文件:n" ) ;
int i = 1 ;
char judstr[MAX] ;
lnodetype * temp ;
char jud ;
char * p = "cls" ;

while ( 1 ){

link( &(*l) , &(*end) ) ;
jud = (*end)->date[0] ;

if ( jud == '5' ){ //輸入『5』結束一切

temp = (*end) ;
(*end) = (*end)->prior ;
free (temp) ;

while (1){

printf ( "******************************* out :退出不保存 ****************************n") ;
printf ( "******************************* edit :編輯信息 *****************************n") ;
printf ( "******************************* quit :退出而不存檔 **************************n") ;
printf ( "******************************* qas :退出且存檔 ****************************n") ;
printf ( "******************************* con :繼續輸入! *****************************n") ;

gets(judstr) ;

if ( !strcmp(judstr , "out") )
{
exitunsave( &(*l) , &(*end) ) ;
return 0 ;
}
else
if ( !strcmp(judstr , "qas") )
{
quitandsave( &(*l) , &(*end) ) ;
return 0 ;
}
else

if ( !strcmp(judstr , "edit") )
{

editmenu (l , end) ;
return 0;

}

system (p) ;

}
return 0 ;

}

}

return 0 ;

}

//**********這個是裝入文件的函數**********//
int loadtaxt( char * filename )
{

FILE * fp ;
lnodetype * l ;
char ch ;
int i = 0 ;
char * p = "cls" ;
char judstr[MAX] ;
lnodetype * head ;
lnodetype * end ;

iniatelist ( &head , &end) ;
l = end = head ;

if ( (fp = fopen( filename, "r+")) == NULL ){

printf ("文件不能打開!n") ;
return 0 ;

}

ch = fgetc ( fp ) ;
while ( ch != '@' ){

lnodetype *s ;
s = (lnodetype *)malloc ( sizeof (lnodetype) ) ;
if ( s == NULL ){

printf ("內存空間不夠,程序即將退出!") ;
return 0 ;

}

end->next = s ;
s->prior = end ;
end = end->next ;
l->number++ ;
s->quese = l->number ;
printf ("%d行", s->quese ) ;

while ( ch != '#'){

s->date[i] = ch ;
ch = fgetc (fp) ;
i++ ;

}
i = 0;
while ( (end->date[i]>='a' && end->date[i]<='z') ||
(end->date[i]>='A' && end->date[i]<='z') ||
(end->date[i]>='0' && end->date[i]<='9' ) ||
(end->date[i]==' ') )
{

printf ( "%c" , end->date[i] ) ;
i++ ;

}
end->date[i] = '\0' ; //注意在節點的最好加上這個,以讓退出保存功能函數知道此節點已結束

printf ( "n" ) ;
i = 0;
ch = fgetc ( fp ) ;

}

fclose (fp) ;

printf ("n文件成功裝入!n") ;
while (1){

printf ( "******************************* out :退出不保存 ****************************n") ;
printf ( "******************************* edit :編輯信息 *****************************n") ;
printf ( "******************************* qas :退出且存檔 ****************************n") ;
printf ( "******************************* con :繼續輸入! *****************************n") ;

scanf("%s",judstr);

if ( !strcmp(judstr , "out") )
{
exitunsave( &l , &end ) ;
return 0 ;
}
else
if ( !strcmp(judstr , "qas") )
{
quitandsave( &l , &end ) ;
return 0 ;
}
else

if ( !strcmp(judstr , "edit") )
{

editmenu (&l , &end) ;
return 0 ;

}

system (p) ;

}

return 0 ;

}

//**********主函數**********//

void main ( void )
{

//iniatelist (&l , &end) ;
//newtext(&l , &end) ;

char filename[MAX] ;
scanf ( "%s" , filename ) ;
loadtaxt( filename ) ;

}

⑵ C語言如何實現對記事本的讀取和寫入

#include<stdio.h>
#include<string.h>
intfpread()
{
chara[1000]={0};
FILE*fp=fopen("C:\Users\Administrator\Desktop\1.txt","r");
if(NULL==fp)
{
printf("failedtoopendos.txt "碧正);
return1;
}

while(!feof(fp))
{
memset(a,0,sizeof(a));
fgets(a,sizeof(a)-好慧塌1,fp);
printf("%s",a);
}
fclose(fp);
}
intfpwrite()
{
chara[1000];
FILE*fp=fopen("C:\Users\Administrator\Desktop\1.txt"友圓,"a+");
if(NULL==fp)
{
printf("failedtoopendos.txt ");
return1;
}
printf("請輸入你要添加的內容:");
fgets(a,sizeof(a)-1,stdin);
fputs(a,fp);
fclose(fp);
}

intmain()
{
fpread();
fpwrite();
return0;
}

⑶ 記事本寫c語言代碼怎麼運行

記事本寫c語言代碼運行方法如下:
1、安裝MinGW,一個集成編譯調試工具,集成了常見的GCC、G++、GDB等命令,可以輕松編譯運行C語言程序。
2、將bin目錄添加到環境變數中,後面在cmd窗口就可以直接使用GCC命令編譯C語言程序。
3、GCC命令配置完成後,接著就可以編譯運行C語言程序了。
4接著在cmd窗口切換到文件所在目錄,運行命令「gcc-otesttest.c」就可直接編譯程序,成功編譯後會在當前目錄下生成一個exe程序,可以直接運行。

⑷ 怎樣運行用記事本寫的C語言程序

1 先在系統變數或用戶變數中添加MSDev\Bin 和 \VC98\Bin路徑。
設置include路徑:INCLUDE=...\VC98\Include
2 開一個命令行窗口,輸入 cl 看看蔽耐能不能找到路徑。
3 下面用記事本新建一個hello.c程序模冊如下
#include<stdio.h>
int main()
{
printf("Hello world!!");
return 0;
}
4 編譯:cl hello.c 可以看到生成了hello.obj和hello.exe,運行生成的旦並宏hello.exe,成功!

⑸ 怎樣用C語言寫一個程序,打開記事本,並輸入一段文字

先向一個文本文瞎頌件里寫入你想要輸入的文字,然後調用記事本打開這個文件
#include
<stdio.h>
#include
<process.h>
void
main()
{
FILE
*pFile
=
fopen("a.txt",
"w");
char
str[]
=
"你想要輸入的字元串";
fwrite(str,1,
sizeof(str)/sizeof(str[0]),
pFile);
fclose(pFile);
system("notepad
a.txt"磨察鄭沒數);
}

⑹ 用記事本怎麼編輯、運行C語言

1、首先要配置環境變數,在系統變數path中添加MSDevBin 和 VC98Bin路徑。是你所安裝vc6.0的bin目錄。以及設置環境變數include為 ...VC98Include 。是你所安裝vc6.0的路徑的include目錄。不理解的話自己可以網路一下。學過java的話一般都配置過環境變數。

2、然後再在桌面上,新建記事本重命名為hello.c

3、打開記事本輸入如下代碼,保存並關閉。

#include <stdio.h>

int main(){

printf("hello world!");

return 0;

}

4、打開命令行界面,用cd指令定位到桌面,如下圖所示。你的可能輸入的命令不一樣。此時,輸入dir可以看到你桌面的說有文件和目錄。

⑺ C語言能不能用記事本寫

C語言可以用記事本寫出來

接觸過編程的人經常會聽說,大神都用記事本編程,感覺挺高端的。有時候當電腦上沒有編程軟體,或者配置不兼容,又需要當場在電腦上記錄程序內容,就可以用記事本先行寫出來。

用記事本編寫c/c++程序的具體方法如下:

1、首先需要用記事本寫程序源碼,拿一個最簡單的hello world程序來說明。

2、新建一個文檔文件,命名為「1.c」

⑻ C語言對記事本的讀取和寫入

按你需求重改的:

#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#include<conio.h>
#include<string.h>
#defineLEN101//一行最大字元數(LEN-1)/2
typedefstructrowStr//存儲一行數據
{
charstr[LEN];
structrowStr*next;
}RSTR;

voidwriteFile(FILE*fp,RSTR*rstrHead);
RSTR*readFile(FILE*fp,intnRow);//參數:nRow:要讀取幾行
RSTR*strBA(RSTR*rstrHeadA,RSTR*rstrHeadB);//整合BA字元串,返回整合後鏈表首節點
voidmeError(void*p);//內存申請失敗
intmain()
{
FILE*fp;
charfilePath[]="c:\list.txt";
RSTR*rstrHeadA=NULL,*rstrHeadB=NULL,*rstrHeadBA=NULL;
if((fp=fopen(filePath,"rt+"))==NULL)
{
printf("!");
exit(1);
}
fseek(fp,0,SEEK_SET);//文件流指針重置到開頭
printf("----開始讀取文件第一行到鏈表A---- ");
rstrHeadA=readFile(fp,1);
printf("----開始讀取文件剩餘行到鏈表B---- ");
rstrHeadB=readFile(fp,100);//這里第2個參數要大於等於文本剩餘行數

printf("----把A的一行字元串整合到B的每行字元串末尾---- ");
rstrHeadBA=strBA(rstrHeadA,rstrHeadB);

printf("----刪除原文件新建新的空白文件---- ");

if(remove(filePath)==0)
if((fp=fopen(filePath,"rt+"))==NULL)
{
printf("!");
exit(1);
}
fseek(fp,0,SEEK_SET);
printf("----先寫入整合後的字元串到文件---- ");
writeFile(fp,rstrHeadBA);
fclose(fp);


return0;
}
RSTR*strBA(RSTR*rstrHeadA,RSTR*rstrHeadB)
{
RSTR*rstrHeadBA=(RSTR*)malloc(sizeof(RSTR)),*rstrTailBA=NULL,*rstrNew=NULL;
meError(rstrHeadBA);
rstrHeadBA->next=NULL;
while(rstrHeadB->next)
{
rstrNew=(RSTR*)malloc(sizeof(RSTR));
meError(rstrNew);
rstrNew->str[0]=0;
rstrNew->next=NULL;
strcat(rstrNew->str,rstrHeadB->next->str);
strcat(rstrNew->str,rstrHeadA->next->str);
if(rstrHeadBA->next==NULL)
rstrHeadBA->next=rstrNew;
else
rstrTailBA->next=rstrNew;
rstrTailBA=rstrNew;
rstrHeadB=rstrHeadB->next;
}
returnrstrHeadBA;
}
RSTR*readFile(FILE*fp,intnRow)
{
inti=0;
RSTR*rstrHead=(RSTR*)malloc(sizeof(RSTR)),*rstrTail=NULL,*rstrNew=NULL;
meError(rstrHead);
rstrHead->next=NULL;
rstrNew=(RSTR*)malloc(sizeof(RSTR));
meError(rstrNew);
rstrNew->next=NULL;
rstrNew->str[0]=0;
while(fscanf(fp,"%[^ ]%*c",rstrNew->str)!=-1)
{
if(rstrHead->next==NULL)
rstrHead->next=rstrNew;
else
rstrTail->next=rstrNew;
rstrTail=rstrNew;
rstrNew=(RSTR*)malloc(sizeof(RSTR));
meError(rstrNew);
rstrNew->next=NULL;
rstrNew->str[0]=0;
i++;
nRow--;
if(nRow==0)
break;
}
if(i==0)//無數據讀取,刪除預申請空間
rstrHead->next=NULL,rstrTail=NULL;
free(rstrNew);
returnrstrHead;
}
voidwriteFile(FILE*fp,RSTR*rstrHead)//一次寫入一行商品信息
{
printf("----開始寫入文件---- ");
while(rstrHead->next)
{

fprintf(fp,"%s ",rstrHead->next->str);
rstrHead=rstrHead->next;
}
}
voidmeError(void*p)//內存申請失敗
{
if(p==NULL)
{
printf(" 異常:內存申請失敗!回車結束程序! ");
while(getch()!=' ');
exit(0);
}
}

⑼ C語言編寫的記事本源代碼

#include<stdio.h>
#include<malloc.h>
#include<string.h>
#include<stdlib.h>
#include<ctype.h>
#define NULL 0
#define MAX 100

typedef struct lnode{

char date[MAX]; //存放數據
struct lnode * prior ; //前驅
struct lnode * next ; //後繼
int number ; //記錄一個節點的字元數!如果是頭節點就記錄他的節點個數
int quese ; //記錄節點在鏈表中的位置

}lnodetype;

lnodetype * l ; //設置兩個全局變數,分別是頭節點指針和尾節點指針
lnodetype * end ;

//**********這個函數是用來初始化的**********//
int iniatelist (lnodetype ** l , lnodetype ** end)
{

(*l) = (lnodetype *)malloc (sizeof (lnodetype) ) ;
if ( (*l) == NULL )
{

printf ("沒有隻夠的內存空間!程序即將退出!");
return 0 ;

}

(*l)->prior =(*l)->next = NULL ; //這是雙鏈表
(*l)->number = (*l)->quese = 0;
(*end) = (*l) ;

printf ("程序初始化完畢!");
return 0;

}

//**********這個函數是用來建立節點,並且插入元素的**********//
int link(lnodetype ** l, lnodetype ** end)
{

lnodetype *s ;
s = (lnodetype *)malloc ( sizeof (lnodetype) ) ;
if ( s == NULL ){

printf ("內存空間不夠,程序即將退出!") ;
return 0 ;

}

(*end)->next = s ;
s->prior = (*end) ;
(*end) = (*end)->next ;
(*l)->number++ ; //增加一個節點,頭節點的number就加1
s->quese = (*l)->number ; //這個是記錄節點在鏈表中的位置

printf ("%d行", s->quese ) ; //這個是節點在整個鏈表中的位置
gets(s->date) ;
s -> number = strlen(s->date) ;
return 0 ;

}

//**********這個是列印鏈表的函數**********//
int prin (lnodetype ** l, lnodetype ** end)
{

lnodetype * p ;
int i ;
int j = 0;
int couter = (*l)->number ;
p = (*l)->next ;

for (i=0; i < couter; i++){

printf ( "%d行" , i+1 ) ;
j = 0;
while ( ( p->date[j]>='a' && p->date[j]<='z') ||
(p->date[j]>='A' && p->date[j]<='z') ||
p->date[j]>='0' && p->date[j]<='9')
{

printf ( "%c" , p->date[j] ) ;
j++ ;

}
printf ("n") ;
p = p->next ;

}

return 0 ;

}

//*********這個查找和編輯相應行的函數**********//
int search (lnodetype ** l, lnodetype ** end )
{

int number ;
scanf ("%d" , &number) ;
int i ;
lnodetype * p ;
p = (*l)->next ;

for ( i=0; i<number-1; i++ )
p = p->next ;

printf ("%d行" , number ) ;
gets (p->date) ;
return 0 ;

}

//**********這個是在文本文件里搜索字元串的函數**********//
int searchstr(lnodetype ** l , lnodetype ** end)
{

char ptr[100] ;
int arrycouter ;
int mystrcmp( char *, char * , int ) ;

printf ( "ok!現在輸入你查找的字元串!" ) ;
scanf ( "%s" , ptr ) ;
arrycouter = strlen (ptr) ;
lnodetype * s ;
s = (*l)->next ;
char * p ;

int i = 1 ;
int couter = 0 ;
int number = (*l)->number ;
p = (char *)s->date ;

while ( i && number ){

// i=1是,證明沒有找到,向第二個節點繼續尋找

while ( i && ( ( (*p >= 'a') && (*p <= 'z') ) || ( (*p >= 'A') && (*p <= 'Z') ) ) ){

i = mystrcmp ( p , ptr , arrycouter );

if ( i == 1 ){

printf ("字元串已經在第%d行,第%d個字元開始,",s->quese, couter+1 );
i = 0 ;
}
else
{
p++ ;
couter++;
i = 1 ;
}

}

s = s->next ;
p = (char *)s->date ;
number -- ;

}

if ( i == 1 )
printf ("字元串在本文檔中不存在!");
return 0 ;

}

//**********(1)這個函數是用來實現退出不保存功能的**********//
int exitunsave(lnodetype ** l, lnodetype ** end)
{

lnodetype * s ;
while( (*l) != (*end) ){ //如果不保存的話,最好是把節點的空間都釋放,節省空間

s = (*end) ;
(*end) = (*end)->prior ;
free( s ) ;

}

return 0 ;

}

//**********(2)這個函數是用來實現退出但保存功能的**********//
int quitandsave( lnodetype ** l , lnodetype ** end )
{

FILE * fp ;
char ch ;
char filename[20] ;
lnodetype * p;
int i ;
int j ;
int couter = (*l)->number ;

p = (*l)->next ;

printf ("請輸入文件名:") ;
scanf ("%s" , filename ) ;

if ( (fp = fopen( filename , "w" )) == NULL ){

printf ("文件不能打開!n");
return 0 ;

}

for ( i=0; i<couter; i++ ){ //有幾個節點就進行多少次的存貯

ch = p->date[0] ;
j = 1 ;

while (ch != '\0'){

fputc (ch , fp) ;
ch = p->date[j] ;
j++ ;

}

p = p->next ;
fputc ( '#' , fp ) ; //注意在每個節點的後面加上結束的符號

}

fputc ( '@' , fp ) ; //整個文件關閉的標志
fclose ( fp ) ; //注意關閉文件,
return 0 ;

}
//**********由於庫函數比較字元串提供的功能不滿足要求,故自己寫了一個**********/
int mystrcmp( char * p ,char * sour ,int number )
{

while ( number && (*p) == (*sour) &&
( ( (*p >= 'a') && (*p <= 'z') ) || ( (*p >= 'A') && (*p <= 'Z') ) )){

p++ ;
sour++ ;
number-- ;

}

if ( number == 0 )
return 1 ;
else
return 0 ;

}
//**********這個函數是用來實現統計字元串功能的**********//
int coutword(lnodetype ** l , lnodetype ** end)
{ //考慮到只統計一行的單詞沒有意義,故統計整個文本

int yes = 1 ; //這個是進入單詞的標志
int no = 0 ; //在單詞外面的時候的標志
int i , j ,inaword ,count = 0 ;
inaword = no ;
lnodetype * s = (*l)->next ;

for (j=0; j<(*l)->number; j++){

for ( i=0; (s->date[i]>='a' && s->date[i]<='z') ||
(s->date[i]>='A' && s->date[i]<='z') ||
(s->date[i]>='0' && s->date[i]<='9' ) ||
(s->date[i]==' '); i++ )
{

if ( s->date[i] == ' ' )
inaword = no ;
else
if ( inaword == no )
{
inaword = yes ;
count++ ; //計算單詞
}

}

s = s->next ;
inaword = 0 ; //注意這里,把標志置為0了!

}

printf ( "n文本一共有 %d 行" , (*l)->number ) ;
printf ("n此文本一共有 %d 個單詞!" , count ) ;

return count ;

}
//**********這個函數是用來實現計算文本行數功能的**********//
int linecouter(lnodetype ** l , lnodetype ** end )
{

int couter ;
couter = (*l)->number ;
return couter ;

}

//**********這個函數是整和一上所有功能的菜單函數**********//
int editmenu(lnodetype ** l , lnodetype ** end )
{

char choice ;
char * p = "cls" ;
int i = 1 ; //這兩個變數是用來控制循環的
int j= 1 ;
system (p) ;
prin (&(*l) , &(*end)) ;

while (j){

printf ("*********************************** e: 編輯相應行 *************************************n") ;
printf ("*********************************** s: 搜索字元串 *************************************n") ;
printf ("*********************************** t: 統計單詞個數 ***********************************n") ;
printf ("*********************************** q: 退出編輯 ***************************************n") ;

scanf("%c",&choice);
scanf("%c" , &choice) ; //????莫名其妙的問題,非要兩個請求輸入語句才肯停下來!
switch (choice)
{
case 'e' : {
i = 1 ;
while (i)
{
search( &(*l) , &(*end) );
system (p) ;
prin( &(*l) , &(*end) ) ;
printf ("n1 繼續編輯 0 結束編輯n") ;
scanf ("%d" , &i) ;

}

}

break;
case 's' : {

i = 1 ;
while (i)
{
searchstr( &(*l) , &(*end) );
getchar();
getchar();
system (p) ;
prin( &(*l) , &(*end) ) ;
printf ("n1 繼續搜索 0 結束搜索n") ;
scanf ("%d" , &i) ;

}

}
break;
case 't' : {

coutword ( &(*l) , &(*end) ) ;
getchar() ;

}break;

default : return 0 ;

}

system (p) ;
prin( &(*l) , &(*end) ) ;
printf ("n1 回到編輯菜單 0 結束編輯n") ;
scanf ("%d" , &j) ;
if (j == 1)
system (p) ;
else
return 0 ;

}

return 0 ;
}

//**********實現第一個模塊:新建空白文檔**********//
int newtext( lnodetype ** l ,lnodetype ** end )
{

printf ( "新文本文件:n" ) ;
int i = 1 ;
char judstr[MAX] ;
lnodetype * temp ;
char jud ;
char * p = "cls" ;

while ( 1 ){

link( &(*l) , &(*end) ) ;
jud = (*end)->date[0] ;

if ( jud == '5' ){ //輸入『5』結束一切

temp = (*end) ;
(*end) = (*end)->prior ;
free (temp) ;

while (1){

printf ( "******************************* out :退出不保存 ****************************n") ;
printf ( "******************************* edit :編輯信息 *****************************n") ;
printf ( "******************************* quit :退出而不存檔 **************************n") ;
printf ( "******************************* qas :退出且存檔 ****************************n") ;
printf ( "******************************* con :繼續輸入! *****************************n") ;

gets(judstr) ;

if ( !strcmp(judstr , "out") )
{
exitunsave( &(*l) , &(*end) ) ;
return 0 ;
}
else
if ( !strcmp(judstr , "qas") )
{
quitandsave( &(*l) , &(*end) ) ;
return 0 ;
}
else

if ( !strcmp(judstr , "edit") )
{

editmenu (l , end) ;
return 0;

}

system (p) ;

}
return 0 ;

}

}

return 0 ;

}

//**********這個是裝入文件的函數**********//
int loadtaxt( char * filename )
{

FILE * fp ;
lnodetype * l ;
char ch ;
int i = 0 ;
char * p = "cls" ;
char judstr[MAX] ;
lnodetype * head ;
lnodetype * end ;

iniatelist ( &head , &end) ;
l = end = head ;

if ( (fp = fopen( filename, "r+")) == NULL ){

printf ("文件不能打開!n") ;
return 0 ;

}

ch = fgetc ( fp ) ;
while ( ch != '@' ){

lnodetype *s ;
s = (lnodetype *)malloc ( sizeof (lnodetype) ) ;
if ( s == NULL ){

printf ("內存空間不夠,程序即將退出!") ;
return 0 ;

}

end->next = s ;
s->prior = end ;
end = end->next ;
l->number++ ;
s->quese = l->number ;
printf ("%d行", s->quese ) ;

while ( ch != '#'){

s->date[i] = ch ;
ch = fgetc (fp) ;
i++ ;

}
i = 0;
while ( (end->date[i]>='a' && end->date[i]<='z') ||
(end->date[i]>='A' && end->date[i]<='z') ||
(end->date[i]>='0' && end->date[i]<='9' ) ||
(end->date[i]==' ') )
{

printf ( "%c" , end->date[i] ) ;
i++ ;

}
end->date[i] = '\0' ; //注意在節點的最好加上這個,以讓退出保存功能函數知道此節點已結束

printf ( "n" ) ;
i = 0;
ch = fgetc ( fp ) ;

}

fclose (fp) ;

printf ("n文件成功裝入!n") ;
while (1){

printf ( "******************************* out :退出不保存 ****************************n") ;
printf ( "******************************* edit :編輯信息 *****************************n") ;
printf ( "******************************* qas :退出且存檔 ****************************n") ;
printf ( "******************************* con :繼續輸入! *****************************n") ;

scanf("%s",judstr);

if ( !strcmp(judstr , "out") )
{
exitunsave( &l , &end ) ;
return 0 ;
}
else
if ( !strcmp(judstr , "qas") )
{
quitandsave( &l , &end ) ;
return 0 ;
}
else

if ( !strcmp(judstr , "edit") )
{

editmenu (&l , &end) ;
return 0 ;

}

system (p) ;

}

return 0 ;

}

//**********主函數**********//

void main ( void )
{

//iniatelist (&l , &end) ;
//newtext(&l , &end) ;

char filename[MAX] ;
scanf ( "%s" , filename ) ;
loadtaxt( filename ) ;

}
很不容易做的程序!!!
通過編譯

⑽ 如何利用記事本進行c語言編程

記事本可以編輯C語言。下面枯衡,我們來看看如何利用記事本進行c語言編程吧。

記事本

新改敗拆建一張記事本,修改名稱為【hello world】,核棗如下圖所示:

編寫代碼:

#include <stdio.h>

main() {
printf("hello worldn");
}

保存記事本

然後保存記事本,修改後綴名為【.c】,如下圖所示:

就會變成C語言代碼了,如下圖所示: