C语言怎么实现批处理多行程序一次运行而不是一次运行一行

C语言怎么实现批处理多行程序一次运行而不是一次运行一行,第1张

如果多行程序 写在一个批处理里面 那么只能一行一行运行

要想同时运行多个命令

那么可以在C编程的时候 引入多线程

创建多个线程,每个线程运行一行命令。

这样就可以实现多个命令同时执行了

多线程你自己百度一下,网上很多。执行命令就用system就可以了。

/TC2编译通过/

/以回车符为结束符输入一行/

#include <stdioh>

#define MAXSIZE 128

int main()

{

char base[MAXSIZE];

char stack,p;

char c;

stack=base;

while((c=getchar())!='\n')

{

if(c=='@') stack=base;

else if(c=='#'){if(stack!=base) stack--;}

else (++stack)=c;

}

if(stack==base) printf("√");/没有可输出的字符/

p=base;

while(p!=stack) printf("%c",(++p));

getch();

}

可以用PHP、ASP或者其他都行

如果不知道怎么编写,最好考虑先用一些开源的源码

比如wordpress、discuz等

希望能帮助到你

本世纪70年代,人们曾疯魔一种被称作“生命游戏”的小游戏,这种游戏相当简单。假设有一个像棋盘一样的方格网,每个方格中放置一个生命细胞,生命细胞只有两种状态:“生”或“死”。游戏规则如下:

1. 如果一个细胞周围有3个细胞为生(一个细胞周围共有8个细胞),则该细胞为生,即该细胞若原先为死,则转为生,若原先为生,则保

持不变;

2. 如果一个细胞周围有2个细胞为生,则该细胞的生死状态保持不变;

3. 在其它情况下,该细胞为死,即该细胞若原先为生,则转为死,若原先为死,则保持不变。

依此规则进行迭代变化,使细胞生生死死,会得到一些有趣的结果。该游戏之所以被称为“生命游戏”,是因为其简单的游戏规则,反映了

自然界中的生存规律:如果一个生命,其周围的同类生命太少的话,会因为得不到帮助而死亡;如果太多,则会因为得不到足够的资源而死亡。

用计算机模拟这个“生命游戏”也相当简单,可以用一个m×n像素的图像来代表m×n个细胞,其中每一个像素,代表一个细胞,像素为黑色

表示细胞为生,像素为白色代表细胞为死。

设定图像中每个像素的初始状态后依据上述的游戏规则演绎生命的变化,由于初始状态和迭代次数不同,将会得到令人叹服的优美图案。

下面给出的小程序是用tc20编写。演示100×100个生命细胞初始状态全为生时的变代情况,变化时边缘细胞不参与变化。随着迭代次数的不

同,在屏幕显示的图案精彩纷呈,像万花筒般引人入胜。

#include <graphicsh>

main(){

int orgdata[100][100],resdata[100][100];/*分别记录每次迭代的初始和结果状态*/

int ncount,nrows,ncols,i,j,times; /*times记录迭代次数*/

int graphdriver=detect,graphmode;

for (i=0;i<100;i++) /*初始化数据,令每一个细胞为生*/

for (j=0;j<100;j++) orgdata[i][j]=1;

initgraph(&graphdriver,&graphmode,′′′′); /*初始化屏幕显示*/

setcolor(white);

rectangle(270,190,370,290); /*作显示边框*/

for (times=1;times<200;times++){

for (nrows=1;nrows<99;nrows++) {

for (ncols=1;ncols<99;ncols++){

/*计算每一个细胞周围的活的细胞数*/

ncount=orgdata[nrows-1][ncols-1]+orgdata[nrows-1][ncols]

+orgdata[nrows-1][ncols+1]+orgdata[nrows][ncols-1]

+orgdata[nrows][ncols+1]+orgdata[nrows+1][ncols-1]

+orgdata[nrows+1][ncols]+orgdata[nrows+1][ncols+1];

switch(ncount){

/*周围有3个活细胞,该细胞为生,在屏幕上用黑色像素表示*

case 3: putpixel(ncols+210,120+nrows,black);

resdata[nrows][ncols]=1;break;

/*周围有2个活细胞,该细胞不变,在屏幕显示也不变*/

case 2: resdata[nrows][ncols]=orgdata[nrows][ncols];

break;

/*其它情况下,细胞为死,在屏幕上用白色像素表示*/

default:resdata[nrows][ncols]=0;

putpixel(ncols+210,120+nrows,white);

}

}

}

for (i=1;i<99;i++)

for (j=1;j<99;j++) orgdata[i][j]=resdata[i][j];

getch();

}

}

在计算机上运行上述程序,得到迭代次数为45、69、74、78、97、116、119和156时的图像分别如上图所示。

在实际模拟时,可以取更多的生命细胞,也可以考虑生命细胞的初始状态是依一定概率设定的随机状态,变化时也可以让边缘细胞参与变化。

只要对上述程序略作更改,就会得到另外一系列美妙绝伦的图案。

#define NULL 0

#define OK 0

#include <stdioh>

#include <stdlibh>

#include <stringh>

#include <ctypeh>

#include <conioh>

typedef struct text

{

char string[80];//存储每一行的元素

struct text next;//指向后一个节点的指针

struct text pre;//指向前一个节点的指针

int num;//每一行元素的长度

int flat;//确定此行是否被删除的标志

}text;

FILE fp,out;//fp是执行被打开的文件,out指向被写入的文件

text head;//链表的头指针

int n=0,sum,delnum,xiugai=0,page=0;

//修改用来指示文件是否被修改过,如果修改过才回存盘。page用来计算显示的

//页数delnum用来存储被删除的字节数,sum存储一页的总字节数

void byebye()//没有具体用处,只是写着玩的,在屏幕上显示一个bye

{

puts("\t\t\t ");

puts("\t\t\t ");

puts("\t\t\t ");

puts("\t\t\t ");

puts("\t\t\t ");

puts("\t\t\t ");

puts("\t\t\t ");

puts("\t\t\t ");

puts("\t\t\t ");

}

void HELP()//帮助函数,显示一些命令的格式

{

printf("\n\t\n");

printf("\t 打开文件: o<行号><文件名><回车> \n");

printf("\t 行插入格式: i<行号><回车><文本><回车> \n");

printf("\t 行删除格式: d<行号1>[<空格><行号2>]<回车> \n");

printf("\t 活区切换格式: n<回车> \n");

printf("\t 活区显示格式: p<回车> \n");

printf("\t 注意:在执行所有命令前必须先用o命令打开文件,并 \n");

printf("\t 用p命令显示出来!!! \n");

printf("\t\n");

system("pause");

printf("\n\n\n");

}

void ABOUT()//也是写着玩的

{

printf("\n\t\t\n");

printf("\t\t 作者:BLACKCAT \n");

printf("\t\t 单位:ZZU \n");

printf("\t\t E-mail:blackcat242@etangcom \n");

printf("\t\t\n");

system("pause");

system("cls");

printf("\n\n\n");

}

void Createlist()//建立一个十个节点的链表,是文本中的一页

{

text p1,p2;

p1=p2=(text )malloc(sizeof(text));

head=NULL;

while(n<10)

{

n=n+1;

if(n==1) head=p1;

else

{

p2->next=p1;

p1->pre=p2;

p1->flat=0;

}

p2=p1;

p1=(text )malloc(sizeof(text));

}

p2->next=NULL;

}

void freemem()//释放链表所占的内存

{

text p;

for(p=head;head!=NULL;)

{

head=p->next;

free(p);

p=head;

}

}

int Openfiles()//打开文件的函数

{

char name[30],outname[30];

puts("请输入要打开的文件名:");

scanf("%s",name);

if((fp=fopen(name,"r+"))==NULL)

{

printf("打不开原文件! \n");

exit(0);

}

puts("请输入要写入的文件名:");

scanf("%s",outname);

if((out=fopen(outname,"w+"))==NULL)

{

printf("打不开目标文件!\n");

exit(0);

}

return 0;

}

int display()//从文件中读入到链表中,并显示出来

{

int i;

char conti='y';

text p;

while((!feof(fp))&&(conti=='y'||conti=='Y'))

{

page++;

printf("\t\t第%d页\n",page);

for(i=0,p=head,sum=0;(i<10)&&(!feof(fp));i++,p=p->next)

{

fgets(p->string,sizeof(p->string),fp);

puts(p->string);

p->flat=1;

p->num=strlen(p->string);

sum=sum+p->num;

}

puts("Continue(Y/N):");

conti=getche();

if(feof(fp))

{

puts("\n文件已经结束!");

return 0;

}

}

return 0;

}

int saveanddisplay(int hang)//命令n执行的函数,用来将活区的内容显示并读入下一页内容

{

int i,endflat=0;

char conti='y';

text p=NULL;

page++;

for(i=0,p=head;i<hang;i++,p=p->next) //将活区写入文件

if(p->flat==1)

{

fputs(p->string,out);

p->flat=0;

}

if(!feof(fp))

printf("\t\t第%d页\n",page);

for(i=0,p=head,sum=0;(i<10)&&(!feof(fp));i++,p=p->next)//从文件读入活区

if(fgets(p->string,sizeof(p->string),fp))

{

puts(p->string);

p->flat=1;

p->num=strlen(p->string);

sum=sum+p->num;

}

if(feof(fp))

printf("文件已经结束!");

return 0;

}

int saveall()//退出编辑函数后执行的函数,将所有的内容存盘

{

int i,endflat=0;

char conti='y';

text p;

for(i=0,p=head;i<10;i++,p=p->next) //将活区写入文件

if(p->flat==1)

{

fputs(p->string,out);

p->flat=0;

}

while(!feof(fp))//将其余的内容写入文件

fputc(fgetc(fp),out);

return 0;

}

int del()//删除d命令对应的函数,用来删min-max中的行,用结构体中的flat表示是否被删除

{

text p1,p2,p3;

int min,max,i;

xiugai=1;

scanf("%d %d",&min,&max);

if(head==NULL)

{

printf("\nlist null!\n");

return 0;

}

p1=p2=head;

for(i=0;i<min-1;i++)/找到要删除的第一行/

p1=p1->next;

for(i=0;i<max;i++)/找到要删除的最后一行/

p2=p2->next;

for(delnum=0;p1!=p2;p1=p1->next)/删除中间的节点,将flat赋值0/

{

p1->flat=0;

delnum=delnum+p1->num;

}

for(i=0,p3=head;i<10;i++,p3=p3->next)//显示删除后的结果

if(p3->flat==1)

puts(p3->string);

saveanddisplay(10);//将删除后的结果存盘并显示下一页内容(十行)

xiugai=1;

return 0;

}

int insert()//插入i命令对应的函数,在i行后插入文本

{

int hang,i,increhang=1,number=1;

text p,p1,p2;

xiugai=1;

scanf("%d",&hang);

p=p1=NULL;

for(i=0,p1=head;i<hang-1;i++,p1=p1->next);//找到要插入行的前一列

p=(text )malloc(sizeof(text));//为插入行分配空间

p->flat=1;

p->next=p1->next;//从此行向下四行将插入行插入到链表中

p->pre=p1;

p1->next->pre=p;

p1->next=p;

p->string[0]=getchar();

p->string[0]=getchar();

for(i=1;(i<80)&&(p->string[i-1]!='^');i++)

{

p->string[i]=getchar();

if((i+1==80)&&(p->string[i]!='^'))//如果插入的内容超过一行

{ //的容量,则分配下一行空间

p1=p; //并将其连入链表

p=(text )malloc(sizeof(text));

p->flat=1;

p->next=p1->next;

p->pre=p1;

p1->next->pre=p;

p1->next=p;

i=0;

increhang++;

}

p->num=i;

}

p->string[i-1]='\n';

p->string[i]='\0';

puts("修改后的链表:");

for(p2=head;p2!=NULL;p2=p2->next)//显示出修改后的链表

puts(p2->string);

saveanddisplay(10+increhang);//将修改后的链表存盘并显示下一页内容

xiugai=1;

return 0;

}

int EDIT()//编辑函数,用来接受处理编辑命令

{

char cmd;

do

{

cmd=getchar();

printf("\n请输入命令(按E键退出):");

cmd=getchar();

switch(cmd)

{

case 'e':

case 'E':

if(xiugai==1)

saveall();

freemem();

if(fp) fclose(fp);

if(out) fclose(out);

system("cls");

return 0;

case 'o':

case 'O':

Openfiles();

break;

case 'p':

case 'P':

Createlist();

display();

break;

case 'n':

case 'N':

saveanddisplay(10);

break;

case 'd':

case 'D':

del();

break;

case 'i':

case 'I':

insert();

break;

default:printf("\n\n\n!!!输入错误!!!");

}

}while(cmd!='e'&&cmd!='E');

return 0;

}

int main()//主函数,用来接受命令

{

char cmd;

do

{

printf("\n\t\t\n");

printf("\t\t 1 EDIT \n");

printf("\t\t 2 HELP \n");

printf("\t\t 3 ABOUT \n");

printf("\t\t 4 EXIT \n");

printf("\t\t\n");

printf("\n\n请选择1,2,3,4:");

cmd=getche();

switch(cmd)

{

case '4' : system("cls"); byebye(); break;

case '2' : system("cls"); HELP(); cmd=0; break;

case '3' : system("cls"); ABOUT(); cmd=0; break;

case '1' : EDIT(); cmd=0; break;

default : printf("\n\n\n!!!输入错误!!!\n");

}

}while(cmd!='4');

return 0;

}

main(int argc, char argv[])中的参数不是白写的,argc存储参数个数,argv[]指针数组按顺序指向这些参数,你可以解析这些参数做不同的 *** 作,但注意运行时不能直接点exe,要用cmd运行,我们常见的命令行cd,dir,md等都是这么写出来的。

以上就是关于C语言怎么实现批处理多行程序一次运行而不是一次运行一行全部的内容,包括:C语言怎么实现批处理多行程序一次运行而不是一次运行一行、C语言 行编辑程序、如何用c语言编写网站程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9489511.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-28
下一篇 2023-04-28

发表评论

登录后才能评论

评论列表(0条)

保存