当前位置:首页 » 编程软件 » 编程序用getchar

编程序用getchar

发布时间: 2023-01-06 04:00:55

c语言getchar的用法

许多初学者都习惯用 char 型变量接收 getchar、getc,fgetc 等函数的返回值,其实这么做是不对的,并且隐含着足以致命的错误。getchar()最典型的程序也就几行代码而已。下面我们来看看c语言getchar的用法。

一、getchar的两点总结:

1.getchar是以行为单位进行存取的。

当用getchar进行输入时,如果输入的第一个字符为有效字符(即输入是文件结束符EOF,Windows下为组合键Ctrl+Z, Unix/Linux下为组合键Ctrl+D),那么只有当最后一个输入字符为换行符'\n'(也可以是文件结束符EOF,EOF将在后面讨论)时, getchar才会停止执行,整个程序将会往下执行。譬如下面程序段:

while((c = getchar()) != EOF){

putchar(c);

}

执行程序,输入:abc,然后回车。则程序就会去执行puchar(c),然后输出abc,这个地方不要忘了,系统输出的还有一个回车。然后可以继续输入,再次遇到换行符的时候,程序又会把那一行的输入的字符输出在终端上。

对于getchar,肯定很多初学的朋友会问,getchar不是以字符为单位读取的吗?那么,既然我输入了第一个字符a,肯定满足while循环(c = getchar()) != EOF的条件阿,那么应该执行putchar(c)在终端输出一个字符a。不错,我在用getchar的时候也是一直这么想的,但是程序就偏偏不着样执 行,而是必需读到一个换行符或者文件结束符EOF才进行一次输出。

对这个问题的一个解释是,在大师编写C的时候,当时并没有所谓终端输入的概念,所有的输入实际上都是按照文件进行读取的,文件中一般都是以行为单位的。因 此,只有遇到换行符,那么程序会认为输入结束,然后采取执行程序的其他部分。同时,输入是按照文件的方式存取的,那么要结束一个文件的输入就需用到EOF (Enf Of File). 这也就是为什么getchar结束输入退出时要用EOF的原因。

2.getchar()的返回值一般情况下是字符,但也可能是负值,即返回EOF。

这里要强调的一点就是,getchar函数通常返回终端所输入的字符,这些字符系统中对应的ASCII值都是非负的。因此,很多时候,我们会写这样的两行代码:

char c;

c = getchar();

这样就很有可能出现问题。因为getchar函数除了返回终端输入的字符外,在遇到Ctrl+D(Linux下)即文件结束符EOF时,getchar ()的返回EOF,这个EOF在函数库里一般定义为-1。因此,在这种情况下,getchar函数返回一个负值,把一个负值赋给一个char型的变量是不 正确的。为了能够让所定义的变量能够包含getchar函数返回的所有可能的值,正确的定义方法如下(K&R C中特别提到了这个问题):

int c;

c = getchar();

二、EOF的两点总结(主要指普通终端中的EOF)

1.EOF作为文件结束符时的情况:

EOF虽然是文件结束符,但并不是在任何情况下输入Ctrl+D(Windows下Ctrl+Z)都能够实现文件结束的功能,只有在下列的条件下,才作为文件结束符。

(1)遇到getcahr函数执行时,要输入第一个字符时就直接输入Ctrl+D,就可以跳出getchar(),去执行程序的其他部分;

(2)在前面输入的字符为换行符时,接着输入Ctrl+D;

(3)在前面有字符输入且不为换行符时,要连着输入两次Ctrl+D,这时第二次输入的Ctrl+D起到文件结束符的功能,至于第一次的Ctrl+D的作用将在下面介绍。

其实,这三种情况都可以总结为只有在getchar()提示新的一次输入时,直接输入Ctrl+D才相当于文件结束符。

2.EOF作为行结束符时的情况,这时候输入Ctrl+D并不能结束getchar(),而只能引发getchar()提示下一轮的输入。

这种情况主要是在进行getchar()新的一行输入时,当输入了若干字符(不能包含换行符)之后,直接输入Ctrl+D,此时的Ctrl+D并不是文件 结束符,而只是相当于换行符的功能,即结束当前的输入。以上面的代码段为例,如果执行时输入abc,然后Ctrl+D,程序输出结果为:

abcabc

注意:第一组abc为从终端输入的,然后输入Ctrl+D,就输出第二组abc,同时光标停在第二组字符的c后面,然后可以进行新一次的输入。这时如果再次输入Ctrl+D,则起到了文件结束符的作用,结束getchar()。

如果输入abc之后,然后回车,输入换行符的话,则终端显示为:

abc //第一行,带回车

abc //第二行

//第三行

其中第一行为终端输入,第二行为终端输出,光标停在了第三行处,等待新一次的终端输入。

从这里也可以看出Ctrl+D和换行符分别作为行结束符时,输出的不同结果。

EOF的作用也可以总结为:当终端有字符输入时,Ctrl+D产生的EOF相当于结束本行的输入,将引起getchar()新一轮的输入;当终端没有字符 输入或者可以说当getchar()读取新的一次输入时,输入Ctrl+D,此时产生的EOF相当于文件结束符,程序将结束getchar()的执行。

【补充】本文第二部分中关于EOF的总结部分,适用于终端驱动处于一次一行的模式下。也就是虽然getchar()和putchar()确实是按照每次一个字符 进行的。但是终端驱动处于一次一行的模式,它的输入只有到“\n”或者EOF时才结束,因此,终端上得到的输出也都是按行的。

如果要实现终端在读一个字符就结束输入的话,下面的程序是一种实现的方法(参考《C专家编程》,略有改动)

复制代码 代码如下:

/*Edit by Godbach

CU Blog: http://blog.chinaunix.net/u/33048/

*/

#include <stdio.h>

#include <stdlib.h>

int

main(void)

{

int c;

/* 终端驱动处于普通的一次一行模式 */

system("stty raw");

/* 现在的终端驱动处于一次一个字符模式 */

c = getchar();

putchar();

/* 终端驱动处又回到一次一行模式 */

system("stty cooked");

return 0;

}

编译运行该程序,则当如入一个字符时,直接出处一个字符,然后程序结束。

由此可见,由于终端驱动的模式不同,造成了getchar()输入结束的条件不一样。普通模式下需要回车或者EOF,而在一次一个字符的模式下,则输入一个字符之后就结束了。

❷ getchar用法

1、如图所示,输入如下命令,定义字符。

❸ c语言里getchar()是什么

getchar()函数是C语言专门为输入单个字符而提供的,getchar()函数是从I/O字符流中读取一个字符,必须输入换行才能读入字符。

例如:

#include<stdio.h>

int main(void)

{

char ch;

int i;

for(i=0;i<5;i++)

{

ch=getchar();//带回显,且等待按Enter键换行

printf("%c",ch);

}

return 0;

}

(3)编程序用getchar扩展阅读:

getchar()、getche()、getch()相比较

getchar()函数是C语言专门为输入单个字符而提供的,getchar()函数是从I/O字符流中读取一个字符,必须输入换行才能读入字符。

getche()、getch()函数也是读入单个字符,是从控制台直接读取一个字符,无须换行即可读入字符。

getchar()是C的标准库函数,包含在头文件<stdio.h>中。

而getche()和getch()需要的头文件是<conio.h>。conio.h不是C标准库中的头文件。conio是ConsoleInput/Output(控制台输入输出)的简写,其中定义了通过控制台进行数据输入和数据输出的函数,主要是一些用户通过按键盘产生的对应操作。

getchar()函数从键盘读入字符时,输入的字符带回显,并且必须等到输入换行(按Enter键)才能读取一个字符。

getche()函数从键盘读入字符时,输入的字符会回显到显示屏上,但是无须输入换行即可读取一个字符。

getch()函数从键盘读入字符时,输入的字符不回显到显示屏上,但是无须输入换行即可读取一个字符。

❹ 编程序,用getchar函数读入两个字符给C1,C2

getchar() 表示从键盘读取一个字符。注意:回车、空格等只要能在键盘上表示的都是字符。
所以输入时要连续输入,不要用任何东西分隔,如:
输入:AB<回车>
结果为:A,B
你反映的问题只有输出了第一个,是因为你在输入时中间添加了分隔,如:
输入:A<回车>
B<回车>
结果为:A,

❺ c语言getchar()的功能是什么

getchar()在C程序中的功能是接收一个字符。

getchar()在C程序中的功能是接收一个字符,当我们在连续输入字符的时候getchar()会给你意想不到的效果。getchar()是stdio.h中的库函数,它的作用是从stdin流中读入一个字符,也就是说,如果stdin有数据的话不用输入它就可以直接读取了。

c语言的特点

C语言是一种计算机程序设计语言,它既具有高级语言的特点,又具有汇编语言的特点。它由美国贝尔研究所的D.M.Ritchie于1972年推出,1978年后,C语言已先后被移植到大、中、小及微型机上,它可以作为工作系统设计语言。

编写系统应用程序,也可以作为应用程序设计语言,编写不依赖计算机硬件的应用程序。它的应用范围广泛,具备很强的数据处理能力,不仅仅是在软件开发上。

而且各类科研都需要用到C语言,适于编写系统软件,三维,二维图形和动画,具体应用比如单片机以及嵌入式系统开发。

❻ C语言中“getchar”什么意思

C语言中“getchar”的意思是:

getchar函数从标准输入里读取下一个字符,返回类型为int型,返回值为用户输入的ASCⅡ码,出错返回EOF。

该函数声明在stdio.h头文件中,使用的时候要包含stdio.h头文件。通常,可以利用getchar函数让程序调试运行结束后等待编程者按下键盘才返回编辑界面。

ch=getchar();等待从键盘上输入一个字符,

putchar(ch);输出此字符,

他们包含在头文件#include<stdio.h>中。

❼ 4.编程序:用getchar函数读入两个字符给c1,c2,然后分别用putchar和printf函数

#include

int
main()
{char
c1,c2;
c1=getchar();
putchar(c1);
scanf("%c",&c2);
printf("%c\n",c2);
return
0;
}
我们平时从键盘输入的字符都会存到缓存区里面,包括回车字符,getchar是从缓存区读入一个字符,用法是ch=getchar();
scanf并不针对于单个的字符处理,还可以读入数据和字符串,且scanf("%c",&ch)等价于ch=getchar();
至于putchar(ch)则等价于printf("%c",ch);功能是输出一个字符,要输出的字符变量写在括号内,如果要输出的是字符常量比如说感叹号则要这样:putchar('!');或printf("!");或printf("%c",'!');都相同。

热点内容
java返回this 发布:2025-10-20 08:28:16 浏览:593
制作脚本网站 发布:2025-10-20 08:17:34 浏览:888
python中的init方法 发布:2025-10-20 08:17:33 浏览:581
图案密码什么意思 发布:2025-10-20 08:16:56 浏览:765
怎么清理微信视频缓存 发布:2025-10-20 08:12:37 浏览:684
c语言编译器怎么看执行过程 发布:2025-10-20 08:00:32 浏览:1012
邮箱如何填写发信服务器 发布:2025-10-20 07:45:27 浏览:255
shell脚本入门案例 发布:2025-10-20 07:44:45 浏览:113
怎么上传照片浏览上传 发布:2025-10-20 07:44:03 浏览:806
python股票数据获取 发布:2025-10-20 07:39:44 浏览:712