Perl中有类似于getchar函数的用法这样的函数吗

C语言写CGI程序-CGI/Perl教程
当前位置:&>&&>& &
C语言写CGI程序
C语言写CGI程序
| 来源:网络 | 关键字:
C语言写CGI程序
转自:http://blog.csdn.net/clearver/article/details/5209332
一、CGI概述
CGI(公用网关接口)规定了Web服务器调用其他可执行程序(CGI程序)的接口协议标准。Web服务器通过调用CGI程序实现和Web浏
C语言写CGI程序
转自:http://blog.csdn.net/clearver/article/details/5209332
一、CGI概述 CGI(公用网关接口)规定了Web服务器调用其他可执行程序(CGI程序)的接口协议标准。Web服务器通过调用CGI程序实现和Web浏览器的交互, 也就是CGI程序接受Web浏览器发送给Web服务器的信息,进行处理, 将响应结果再回送给Web服务器及Web浏览器。CGI程序一般完成Web网页中表单(Form)数据的处理、数据库查询和实现与传统应用系统的集成等工 作。CGI程序可以用任何程序设计语言编写,如Shell脚本语言、Perl、Fortran、Pascal、C语言等。但是用C语言编写的CGI程序具 有执行速度快、安全性高(因为C语言程序是编译执行且不可被修改)等特点。 CGI接口标准包括标准输入、环境变量、标准输出三部分。 1.标准输入 CGI 程序像其他可执行程序一样,可通过标准输入(stdin)从Web服务器得到输入信息,如Form中的数据,这就是所谓的向CGI程序传递数据的 POST方法。这意味着在操作系统命令行状态可执行CGI程序,对CGI程序进行调试。POST方法是常用的方法,本文将以此方法为例,分析CGI程序设 计的方法、过程和技巧。 2.环境变量 操作系统提供了许多环境变量,它们定义了程序的执行环境,应用程序可以存取它们。Web服务器和CGI接口又另外设置了自己的一些环境变量,用来向CGI 程序传递一些重要的参数。CGI的GET方法还通过 环境变量QUERY-STRING向CGI程序传递Form中的数据。 3.标准输出 CGI程序通过标准输出(stdout)将输出信息传送给Web服务器。传送给Web服务器的信息可以用各种格式,通常是以纯文本或者HTML文本的形式,这样我们就可以在命令行状态调试CGI程序,并且得到它们的输出。 下面是一个简单的CGI程序,它将HTML中Form的信息直接输出到We b浏览器。 引用 #include & stdio.h & #include & stdib.h & main() { int,i,n; printf (〃Contenttype:text/plainnn〃); n=0; if(getenv(〃CONTENT-LENGTH〃)) n=atoi(getenv(CONTENT-LENGTH〃)); for (i=0;i putchar(getchar()); putchar (&n&); fflush(stdout); } 下面对此程序作一下简要的分析。 prinft (〃Contenttype:text/plainnn〃); 此行通过标准输出将字符串〃Contenttype:text/plainnn〃传送给Web服务器。它是一个MIME头信息,它告诉Web服务器随后的 输出是以纯ASCII文本的形式。请注意在这个头信息中有两个新行符,这是因为Web服务器需要在实际的文本信息开始之前先看见一个空行。 if (getenv(〃CONTENT-LENGTH〃)) n=atoi (getenv(〃CONTENT-LENGTH〃)); 此行首先检查环境变量CONTENT-LENGTH是否存在。Web服务器在调用使用POST方法的CGI程序时设置此环境变量,它的文本值表示Web服 务器传送给CGI程序的输入中的字符数目,因此我们使用函数atoi() 将此环境变量的值转换成整数,并赋给变量n。请注意Web服务器并不以文件结束符来终止它的输出,所以如果不检查环境变量CONTENT-LENGTH, CGI程序就无法知道什么时候输入结束了。 for (i=0;i putchar(getchar()); 此行从0循环到(CONTENT-LENGTH-1)次将标准输入中读到的每一个字符直接拷贝到标准输出,也就是将所有的输入以ASCII的形式回送给Web服务器。 通过此例,我们可将CGI程序的一般工作过程总结为如下几点。 1.通过检查环境变量CONTENT-LENGTH,确定有多少输入; 2.循环使用getchar()或者其他文件读函数得到所有的输入; 3.以相应的方法处理输入; 4.通过〃Contenttype:〃头信息,将输出信息的格式告诉Web服务器; 5.通过使用printf()或者putchar()或者其他的文件写函数,将输出传送给Web服务器。 总之,CGI程序的主要任务就是从Web服务器得到输入信息,进行处理,然后将输出结果再送回给Web服务器。 二、环境变量 环境变量是文本串(名字/值对),可以被OS Shell或其他程序设置 ,也可以被其他程序访问。它们是Web服务器传递数据给CGI程序的简单手段,之所以称为环境变量是因为它们是全局变量,任何程序都可以存取它们。 下面是CGI程序设计中常常要用到的一些环境变量。 HTTP-REFERER:调用该CGI程序的网页的URL。 REMOTE-HOST:调用该CGI程序的Web浏览器的机器名和域名。 REQUEST- METHOD:指的是当Web服务器传递数据给CGI程序时所采用的方法,分为GET和POST两种方法。GET方法仅通过环境变量(如 QUERY-STRING)传递数据给CGI程序,而POST方法通过环境变量和标准输入传递数据给CGI程序,因此POST方法可较方便地传递较多的数 据给CGI程序。 SCRIPT-NAME:该CGI程序的名称。 QUERY-STRING:当使用POST方法时,Form中的数据最后放在QUERY-STRING中,传递给CGI程序。 CONTENT-TYPE:传递给CGI程序数据的MIME类型,通常为〃applica tion/x-www-form-url encodede〃,它是从HTML Form中以POST方法传递数据给CGI程序的数据编码类型,称为URL编码类型。 CONTENT-LENGTH:传递给CGI程序的数据字符数(字节数)。 在C语言程序中,要访向环境变量,可使用getenv()库函数。例如: if (getenv (〃CONTENT-LENGTH〃)) n=atoi(getenv (〃CONTENT-LENGTH〃)); 请注意程序中最好调用两次getenv():第一次检查是否存在该环境变量,第二次再使用该环境变量。这是因为函数getenv()在给定的环境变量名不存在时,返回一个NULL(空)指针,如果你不首先检查而直接引用它,当该环境变量不存在时会引起CGI程序崩溃。 三、From输入的分析和解码 1.分析名字/值对 当用户提交一个HTML Form时,Web浏览器首先对Form中的数据以名字/值对的形式进行编码,并发送给Web服务器,然后由Web服务器传递给CGI程序。其格式如下: name1=value1&name2=value2&name3=value3&name4=value4&... 其中名字是Form中定义的INPUT、SELECT或TEXTAREA等标置(Tag)名字,值是用户输入或选择的标置值。这种格式即为URL编码,程 序中需要对其进行分析和解码。要分析这种数据流,CGI程序必须首先将数据流分解成一组组的名字/值对。这可以通过在输入流中查找下面的两个字符来完成。 每当找到字符=,标志着一个Form变量名字的结束;每当找到字符& ,标志着一个Form变量值的结束。请注意输入数据的最后一个变量的值不以&结束。 一旦名字/值对分解后,还必须将输入中的一些特殊字符转换成相应的ASCII字符。这些特殊字符是: +:将+转换成空格符; %xx:用其十六进制ASCII码值表示的特殊字符。根据值xx将其转换成相应的ASCII字符。 对Form变量名和变量值都要进行这种转换。下面是一个对Form数据进行分析并将结果回送给Web服务器的CGI程序。 引用 #include & stdio.h & #include & stdlib.h & #include & strings.h & int htoi(char *); main() { int i,n;
printf (〃Contenttype: text/plainnn〃); n=0; if (getenv(〃CONTENT-LENGTH〃)) n=atoi(getenv(〃CONTENT-LENGTH〃)); for (i=0; i &i++){ int is-eq=0; c=getchar(); switch (c){ case &&&: c=&n&;
case &+&: c=& &;
case &%&:{ char s[3]; s[0]=getchar(); s[1]=getchar(); s[2]=0; c=htoi(s); i+=2; }
case &=&: c=&:&; is-eq=1;
}; putchar(c); if (is-eq) putchar(& &); } putchar (&n&); fflush(stdout); } /* convert hex string to int */ int htoi(char *s) { char *digits=〃ABCDEF〃; if (islower (s[0])) s[0]=toupper(s[0]); if (islower (s[1])) s[1]=toupper(s[1]); return 16 * (strchr(digits, s[0]) -strchr (digits,&0&) ) +(strchr(digits,s[1])-strchr(digits,&0&)); } 上面的程序首先输出一个MIME头信息给Web服务器,检查输入中的字符数,并循环检查每一个字符。当发现字符为&时,意味着一个名字/值对的结 束,程序输出一个空行;当发现字符为+时,将它转换成空格; 当发现字符为%时,意味着一个两字符的十六进制值的开始,调用htoi()函数将随后的两个字符转换为相应的ASCII字符;当发现字符为=时,意味着一 个名字/值对的名字部分的结束,并将它转换成字符:。最后将转换后的字符输出给Web服务器。 四、产生HTML输出 CGI 程序产生的输出由两部分组成:MIME头信息和实际的信息。两部分之间以一个空行分开。我们已经看到怎样使用MIME头信息〃Cont enttype:text/plainnn〃和printf()、put char()等函数调用来输出纯ASCII文本给Web服务器。实际上,我们也可以使用MIME头信息〃C ontenttype:text/htmlnn〃来输出HTML源代码给Web服务器。请注意任何MIME头信息后必须有一个空行。一旦发送这个MIME 头信息给We b服务器后,Web浏览器将认为随后的文本输出为HTML源代码,在HTML源代码中可以使用任何HTML结构,如超链、图像、Form,及对其他CGI 程 序的调用。也就是说,我们可以在CGI程序中动态产生HTML源代码输出 ,下面是一个简单的例子。 引用 #include & stdio.h & #include & string.h & main() { printf(〃Contenttype:text/html/n/n〃); printf(〃& html &/n〃); printf(〃& head && title &An HTML Page From a CGI& /title && /head &/n〃); printf(〃& body & n〃); printf(〃& h2 & This is an HTML page generated from with i n a CGI program.. .& /h2 &/n〃); printf(〃& hr && p &/n〃); printf(〃& a href="../output.html#two" && b & Go back to out put.html page & /b && /a &/n〃); printf(〃& /body &/n〃); printf(〃& /html &/n〃); fflush(stdout); } 上面的CGI程序简单地用printf()函数来产生HTML源代码。请注意在输出的字符串中如果有双引号,在其前面必须有一个后斜字符, 这是因为整个HTML代码串已经在双引号内,所以HTML代码串中的双引号符必须用一个后斜字符来转义。 在 HTML中,当客户填写了表单,并按下了发送(submit)按钮后,表单的内容被发送到了服务器端,一般的,这时就需要有一个服务器端脚本来 对表单的内容进行一些处理,或者是把它们保存起来,或者是按内容进行一些查询,或者是一些别的什么。没有了CGI,WEB的世界就完全失去了它的交互性, 所有的信息都变成单向的了,而不能够有任何的反馈。 有的人认为可以用java script来代替CGI程序,这其实是一个概念上的错误。java script只能够在客户浏览器中运行,而CGI却是工作在服务器上的。他们所做的工作有一些交集,比如表单数据验证一类的,但是java script是绝对无法取代CGI的。但可以这样说,如果一项工作即能够用java script来做,又可以用CGI来做,那么绝对要使用java script,在执行的速度上,java script比CGI有着先天的优势。只有那些在客户端解决不了的问题,比如和某个远程数据库交互,这时就应该使用CGI了。 简单的说来,CGI是用来沟通HTML表单和服务器端程序的接口(interface)。说它是接口,也就是说CGI并不是一种语言,而是可以被其他语言 所应用的一个规范集。理论上讲,你可以用任何的程序语言来编写CGI程序,只要在编程的时候符合CGI规范所定义的一些东西就可以了。由于C语言在平台无 关性上表现不错(几乎在任何的系统平台下都有其相应编译器),而且对大多数程序员而言都算得上很熟悉(不像Perl),因此,C是CGI编程的首选语言之 一。这儿我们介绍的,就是如何使用C来编写CGI程序。 作为CGI编程的最为简单的例子,就是进行表单的处理。因而在这篇文章中,我们主要介绍的就是如何用C来编写CGI程序来进行表但处理。 GET表单的处理 对于那些使用了属性&METHOD=GET&的表单(或者没有METHOD属性,这时候GET是其缺省值),CGI定义为:当表单被发送到服务器断后,表 单中的数据被保存在服务器上一个叫做QUERY_STRING的环境变量中。这种表单的处理相对简单,只要读取环境变量就可以了。这一点对不同的语言有不 同的做法。在C语言中,你可以用库函数getenv(定义在标准库函数stdlib中)来把环境变量的值作为一个字符串来存取。你可以在取得了字符串中的 数据后,运用一些小技巧进行类型的转换,这都是比较简单的了。在CGI程序中的标准输出(output)(比如在C中的stdout文件流)也是经过重定 义了的。它并没有在服务器上产生任何的输出内容,而是被重定向到客户浏览器。这样,如果编写一个C的CGI程序的时候,把一个HTML文档输出到它的 stdout上,这个HTML文档会被在客户端的浏览器中显示出来。这也是CGI程序的一个基本原理。 我们来看看具体的程序实现,下面是一段HTML表单: & form ACTION="/cgi-bin/mult.cgi" & & P &请在下面填入乘数和被乘数,按下确定后可以看到结果。 & INPUT NAME="m" SIZE="5" & & INPUT NAME="n" SIZE="5" && BR & & INPUT TYPE="SUBMIT" values="确定" & & /form & 我们要实现的功能很简单,就是把表单中输入的数值乘起来,然后输出结果。其实这个功能完全可以用java script来实现,但为了让程序尽量的简单易懂,我还是选择了这个小小的乘法来作为示例。 下面就是处理这个表单的CGI程序,对应于form标签中的ACTION属性值。 引用 #include & stdio.h & #include & stdlib.h & int main(void) { char * long m,n; printf("%s%c%c ","Content-Type:text/charset=gb); printf("& TITLE &乘法结果& /TITLE & "); printf("& H3 &乘法结果& /H3 & "); data = getenv("QUERY_STRING"); if(data == NULL) printf("& P &错误!数据没有被输入或者数据传输有问题"); else if(sscanf(data,"m=%ld&n=%ld",&m,&n)!=2) printf("& P &错误!输入数据非法。表单中输入的必须是数字。"); else printf("& P &%ld和%ld的成绩是:%ld。",m,n,m*n); return 0; } 具体的C语法就不多讲了,我们来看看它作为CGI程序所特殊的地方。 前面已经提到标准输出的内容就是要被显示在浏览器中的内容。第一行的输出内容是必须的,也是一个CGI程序所特有的:printf("%s%c%c ","Content-Type:text/html",13,10),这个输出是作为HTML的文件头。因为CGI不仅可以像浏览器输出HTML文本, 而且可以输出图像,声音之类的东西。这一行告诉浏览器如何处理接受到的内容。在Content-Type的定义后面跟有两行的空行,这也是不可缺少的。因 为所有CGI程序的头部输出都是相近的,因而可以为其定义一个函数,来节省编程的时间。这是CGI编程常用的一个技巧。 程序在后面调用了用了库函数getevn来得到QUERY_STRING的内容,然后使用sscanf函数把每个参数值取出来,要注意的是sscanf函数的用法。其他的就没有什么了,和一般的C程序没有区别。 把程序编译后,改名为mult.cgi放在/cgi-bin/目录下面,就可以被表单调用了。这样,一个处理GET方式表单的CGI程序就大功告成了。 POST表单处理 下面我们来考虑另外一种表单传送方法:POST。假设我们要实现的任务是这样的:把表单中客户输入的一段文本内容添加到服务器上的一个文本文件的后面。这 可以看作是一个留言版程序的雏形。显然,这个工作是无法用java script这种客户端脚本来实现,也算得上真正意义上的CGI程序了。 看起来这个问题和上面讲的内容很相近,仅仅是用不同的表单和不同的脚本(程序)而已。但实际上,这中间是有一些区别的。在上面的例子中,GET的处理方法 可以看作是&纯查询(pure query)&类型的,也就是说,它与状态无关。同样的数据可以被提交任意的次数,而不会引起任何的问题(除了服务器的一些小小的开销)。但是现在的任务 就不同了,至少它要改变一个文件的内容。因而,可以说它是与状态有关的。这也算是POST和GET的区别之一。而且,GET对于表单的长度是有限制的,而 POST则不然,这也是在这个任务中选用POST方法的主要原因。但相对的,对GET的处理速度就要比POST快一些。 在 CGI的定义中,对于POST类型的表单,其内容被送到CGI程序的标准输入(在C语言中是stdin),而被传送的长度被放在环境变量 CONTENT_LENGTH中。因而我们要做的就是,在标准输入中读入CONTENT_LENGTH长度的字符串。从标准输出读入数据听起来似乎要比从 环境变量中读数据来的要容易一些,其实则不然,有一些细节地方要注意,这在下面的程序中可以看到。特别要注意的一点就是:CGI程序和一般的程序有所不 同,一般的程序在读完了一个文件流的内容之后,会得到一个EOF的标志。但在CGI程序的表单处理过程中,EOF是永远不会出现的,所以千万不要读多于 CONTENT_LENGTH长度的字符,否这会有什么后果,谁也不知道(CGI规范中没有定义,一般根据服务器不同而有不同得处理方法)。 我们来看看到底如何从POST表单收集数据到CGI程序,下面给出了一个比较简单的C源代码: 引用 #include & stdio.h & #include & stdlib.h & #define MAXLEN 80 #define EXTRA 5 /* 4个字节留给字段的名字"data", 1个字节留给"=" */ #define MAXINPUT MAXLEN+EXTRA+2 /* 1个字节留给换行符,还有一个留给后面的NULL */ #define DATAFILE "../data/data.txt" /* 要被添加数据的文件 */ void unencode(char *src, char *last, char *dest) { for(; src != src++, dest++) if(*src == "+") *dest = " "; else if(*src == "%") {
if(sscanf(src+1, "%2x", &code) != 1) code = ""; *dest = src +=2; } else *dest = * *dest = " "; *++dest = ""; } int main(void) { char * char input[MAXINPUT], data[MAXINPUT];
printf("%s%c%c ","Content-Type:text/charset=gb); printf("& TITLE &Response& /TITLE & "); lenstr = getenv("CONTENT_LENGTH"); if(lenstr == NULL || sscanf(lenstr,"%ld",&len)!=1 || len & MAXLEN) printf("& P &表单提交错误"); else { FILE *f; fgets(input, len+1, stdin); unencode(input+EXTRA, input+len, data); f = fopen(DATAFILE, "a"); if(f == NULL) printf("& P &对不起,意外错误,不能够保存你的数据 "); else fputs(data, f); fclose(f); printf("& P &非常感谢,您的数据已经被保存& BR &%s",data); } return 0; } 从本质上来看,程序先从CONTENT_LENGTH环境变量中得到数据的字长,然后读取相应长度的字符串。因为数据内容在传输的过程中是经过了编码的,所以必须进行相应的解码。编码的规则很简单,主要的有这几条: 1. 表单中每个每个字段用字段名后跟等号,再接上上这个字段的值来表示,每个字段之间的内容用&连结; 2. 所有的空格符号用加号代替,所以在编码码段中出现空格是非法的; 3. 特殊的字符比如标点符号,和一些有特定意义的字符如&+&,用百分号后跟其对应的ACSII码值来表示。 例如:如果用户输入的是: Hello there! 那么数据传送到服务器的时候经过编码,就变成了data=Hello+there%21 上面的unencode()函数就是用来把编码后的数据进行解码的。在解码完成后,数据被添加到data.txt文件的尾部,并在浏览其中回显出来。 把文件编译完成后,把它改名为collect.cgi后放在CGI目录中就可以被表单调用了。下面给出了其相应的表单: & form ACTION="/cgi-bin/collect.cgi" METHOD="POST" & & P &请输入您的留言(最多80个字符):& BR && INPUT NAME="data" SIZE="60" MAXLENGTH="80" && BR & & INPUT TYPE="SUBMIT" values="确定" & & /form & 事实上,这个程序只能作为例子,是不能够正式的使用的。它漏掉了很关键的一个问题:当有多个用户同时像文件写入数据是,肯定会有错误发生。而对于一个这样 的程序而言,文件被同时写入的几率是很大的。因此,在比较正式的留言版程序中,都需要做一些更多的考虑,比如加入一个信号量,或者是借助于一个钥匙文件 等。因为那只是编程的技巧问题,在这儿就不多说了。 最后,我们来写一个浏览data.txt文件的的CGI程序,这只需要把内容输出到stdout就可以了: 引用 #include & stdio.h & #include & stdlib.h & #define DATAFILE "../data/data.txt" int main(void) { FILE *f = fopen(DATAFILE,"r");
if(f == NULL) { printf("%s%c%c ", "Content-Type:text/charset=gb); printf("& TITLE &错误 & /TITLE & "); printf("& P && EM &意外错误,无法打开文件& /EM &"); } else { printf("%s%c%c ", "Content-Type:text/plain",13,10); while((ch=getc(f)) != EOF) putchar(ch); fclose(f); } return 0; } 这个程序唯一要注意的是:它并没有把data.txt 包装成HTML格式后再输出,而是直接作为简单文本(plain text)输出,这只要在输出的头部用text/plain类型代替text/html就可以了,浏览器会根据Content-Type的类型自动的选择 相应的处理方法。 要触发这个程序也很简单,因为没有数据要输入,所以只需一个按钮就可以搞定了: & form ACTION="/cgi-bin/viewdata.cgi" & & P && INPUT TYPE="SUBMIT" values="察看" & & /form & 到这儿,一些基本的用C编写CGI程序的原理就将完了。当然,就凭讲的这些内容,还很难编写出一个好的CGI程序,这需要进一步的学习CGI的规范定义,以及一些其他的CGI编程特有的技巧。 这篇文章的目的,也就是要你了解一下CGI编程的概念。事实上,现在的一些主流的服务器端脚本编程语言如ASP,PHP,JSP等,都基本上具备了CGI 编程的大部分的功能,但他们在使用上的,确实是比无论用什么语言进行CGI编程都要容易的多。所以在进行服务器端编程的时候,一般都会首先考虑使用这些脚 本编程语言。只有当他们也解决不了,比如要进行一些更为底层的编程的时候,才会用到CGI
无相关信息
网友评论仅供其表达个人看法,并不表明网易立场。1251人阅读
贝海拾遗(29)
C语言(11)
& & & &在看《C程序语言》讲文件操作的时候(第七章),书上说“类似于getchar和putchar,getc和putc是宏而不是函数。这也就是说getchar和putchar是宏不是函数”。我原来一直没注意,以为就是函数呢⊙﹏⊙b汗。查了一下相关资料发现其实是这样的:
==================C陷阱与缺陷&139页===================================================
函数调用需要花费较长的程序执行时间,因此getchar经常被实现为宏。这个宏在stdio.h中定义,因此如果一个程序没有包含stdio头文件,编译器对getchar的定义一无所知。在这种情况下,编译器会假定getchar是一个返回类型为整型的函数。
实际上,很多C语言实现在库文件中都包括有getchar函数,忘记在程序中包含stdio头文件的效果就是在所有出现getchar宏的地方都用getchar函数调用来替换getchar宏。
====================================================================================
& & & &另外,启动一个C语言程序时,操作系统环境负责打开3个文件,并将这3个文件的指针提供给该程序。这3个文件分别是标准输入、标准输出和标准错误,相应的文件指针分别为stdin、stdout和stderr,它们在&stdio.h&中声明。在大多数环境中,stdin指向键盘,而stdout和stderr指向显示器。不过stdin和stdout都可以被重定向到文件或管道。
& & & &getchar和putchar函数可以通过getc、putc、stdin以及stdout定义如下:
getc(stdin)
putchar(c)
& & & &综上所述,标题中问题答案是:如果一个程序没有包含stdio头文件,编译器对getchar的定义一无所知。在这种情况下,编译器会假定getchar是一个返回类型为整型的函数。如果包含了stdio头文件,那么就会认为getchar是一个宏。
& & & &PS:一些相关的讨论可以看下这个帖子:
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:83292次
积分:1349
积分:1349
排名:千里之外
原创:46篇
转载:41篇
评论:11条
(2)(1)(2)(2)(3)(17)(6)(11)(11)(8)(23)(2)C语言基础教程 1.4.1常用的输人函数
C语言基础教程 1.4.1常用的输人函数
&&& 常用的输人函数是指从键盘上接收数据的函数,它们是getchar(), gets()和scan# C)三个函数。
&&& 1。获得一个字符的函数getchar()
&&& 该函数的功能是从键盘上获取一个字符,它是带缓冲区和回显的,所谓带缓冲区是指该函数不是当一个字符键人后立即被势收,而是将键入的字符先放在内存缓冲区中,当若干个字符键入完后,再从缓冲区中按先后顺序获得字符。所谓带回显是指键入一个字符后在显示器屏幕上显示出所键人的字符。该函数的格式如下所示:
&&& int getchar ()
&&& 该函数没有参数,它的返回值是一个int型数,即所接收的字符的ASCII码值。
&&& 2。获得一个字符串的两数gets ( )
&&& 该函数的功能是从键盘上获取所键入的字符串。该函数的正常返回值是一个字符型指针,即读取到的字符串的首地址,出错时返回}ruLL(rruLL被定义为。)。该函数的格式如下所示
&&& char * gets(s)&&& Char*s;
&&& 其中,*作为说明符表示指针,而char*表示char型指针。具体指针的详细讲解在本书
&&& “指针”一章中。输入的字符串以’\n'(换行符)为结束。
&&& 3。标准格式拾入函数scanf()
&&& 标准格式输入函数是指从标准输入设备健盘上读取数据犷并且按所指定的格式将读取的数据赋给相应的变量。该函数的格式如下:
&&& int scanf ("(控制串》”,(参数表))
&&& 该函数的参数由两部分组成,其中一部分是由双引号括起来被称为控制串,另一部分是参数表,(控制串)中包含格式符和一般字符。格式符是用来说明对应的输入项的格式的。格式符的标识符是百分号(写),它后面跟的字母表示格式的格式说明符。scanf()函数的格式说明符如下所示:
&&& d一十进制整数&&& x-十六进制整数&&& o-八进制整数&&& u-无符号十进制数&&& f-小数表示的浮点数&&& e-指数表示的浮点数&&& c-单个字符&&& s-一字符串
&&& 控制串中的一般字符表示匹配符,另外在%和格式说明符之间还可加修饰符,这些内容将在“文件和读写函数”一章中讲解。
&&& (参数表)是由一个或多个参数构成,多个参数使用时用逗号分隔。每个参数用地址值表示。要求参数的个数和类型与控制串中格式符的个数和类型相一致,即要求其个数相等,类型相同。
&&& 该函数具有一个整型数的返回值,该返回值表示该函数参数表中成功获得数据的参数的个数。
&&& 三种输人函数的例子,将会在后面的程序中看到。
H3C认证Java认证Oracle认证
基础英语软考英语项目管理英语职场英语
.NETPowerBuilderWeb开发游戏开发Perl
二级模拟试题一级模拟试题一级考试经验四级考试资料
软件测试软件外包系统分析与建模敏捷开发
法律法规历年试题软考英语网络管理员系统架构设计师信息系统监理师
高级通信工程师考试大纲设备环境综合能力
路由技术网络存储无线网络网络设备
CPMP考试prince2认证项目范围管理项目配置管理项目管理案例项目经理项目干系人管理
职称考试题目
招生信息考研政治
网络安全安全设置工具使用手机安全
生物识别传感器物联网传输层物联网前沿技术物联网案例分析
Java核心技术J2ME教程
Linux系统管理Linux编程Linux安全AIX教程
Windows系统管理Windows教程Windows网络管理Windows故障
数据库开发Sybase数据库Informix数据库
&&&&&&&&&&&&&&&
希赛网 版权所有 & &&}

我要回帖

更多关于 c语言getchar函数 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信