⑴ 如何用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语言代码了,如下图所示: