getchar的返回值
- 格式:docx
- 大小:36.89 KB
- 文档页数:3
许多初学者都习惯用char 型变量接收getchar、getc,fgetc 等函数的返回值,其实这么做是不对的,并且隐含着足以致命的错误。
getchar 等函数的返回值类型都是int 型当这些函数读取出错或者读完文件后,会返回EOF.EOF 是一个宏,标准规定它的值必须是一个int 型的负数常量。
通常编译器都会把EOF 定义为-1.问题就出在这里,使用char 型变量接收getchar 等函数的返回值会导致对EOF 的辨认出错,或者错把好的数据误认为是EOF,或者把EOF 误认为是好的数据。
Int c;while ( (c = fgetc(fp)) != EOF ){Putchar=C;}如上例所示,我们很多时候都需要先用一个变量接收 fgetc 等函数的返回值,然后再用这个变量和 EOF 比较,判断是否已经读完文件。
上面这个例子是正确的,把 c 定义为 int 型保证了它能正确接收 fgetc 返回的 EOF,从而保证了这个比较的正确性。
但是,如果把 c 定义为 char 型,则会导致意想不到的后果。
首先,因为 fgetc 等函数的返回值是 int 型的,当赋值给 ch ar 型变量时,会发生降级,从而导致数据截断。
例如:---------------------------------| 十进制 | int | char ||--------|--------------|-------|| 10 | 00 00 00 0A | 0A || -1 | FF FF FF FF | FF || -2 | FF FF FF FE | FE |---------------------------------在此,我们假设 int 和 char 分别是 32 位和 8 位的。
由上表可得,从 int 型到 char 型,损失了 3 个字节的数据。
当我们要拿 char 型和 int 型比较的时候,char 型会自动升级为 int 型。
c语言getchar putchar的返回值getchar和putchar是C语言中用于输入输出字符的函数。
getchar函数从标准输入中读取一个字符并返回其ASCII码值,而putchar函数将一个字符输出到标准输出。
在C语言中,输入和输出是通过标准输入和标准输出实现的。
标准输入通常是键盘,而标准输出通常是屏幕。
getchar和putchar函数是基于这两个标准设备来进行字符输入输出的。
本文将详细介绍这两个函数的用法和返回值。
一、getchar函数的返回值getchar函数的原型在stdio.h头文件中定义如下:int getchar(void);它的返回值是一个int类型的整数。
具体的返回值有以下几种情况:①如果成功读取一个字符,则返回该字符的ASCII码值;②如果到达文件末尾(EOF),则返回EOF(End Of File);③如果发生错误,则返回一个负值。
1. 成功读取字符当成功读取一个字符时,getchar函数会返回该字符的ASCII码值。
ASCII码是用7位二进制数表示的字符编码标准,代表了包含了数字、字母、控制字符和特殊字符等在内的128个字符。
其中0到31和127是控制字符,32到126是可显示字符。
例如,当输入字符'a'时,getchar函数会返回97;输入字符'1'时,会返回49。
下面是一个示例程序,演示了getchar函数的返回值:```C#include <stdio.h>int main() {int ch;printf("Please enter a character: ");ch = getchar();printf("The ASCII value of the character is: %d\n", ch);return 0;}```当运行该程序并输入字符'a'时,输出结果如下:```Please enter a character: aThe ASCII value of the character is: 97```可见,getchar函数返回了字符'a'的ASCII码值97。
getchar()函数的返回值类型
char c;
c=getchar();
if(c==EOF)
...
这条语句潜在的危险就连许多高手都难以察觉,其责任并不在用户,是函数getchar误导了使用者。
看一下getchar的原型:
int getchar(void);
那么,上面那个例子,由于c是char类型,取值范围是[-128,127],如果宏EOF的值在char的取值范围之外,那么if语句将总是失败,像我们这种在门外徘徊的探头探脑的人们,怎么会懂这么多恩??
于是乎,又有个问题,为什么c标准库函数的设计者要将getchar声明为令人迷糊的int
类型呢?
答案很简单:在正常情况下,getchar的确返回单个字符。
但如果getchar碰到文件结束标志或发生读错误,它必须返回一个EOF。
为了区别于正常的字符,只好将EOF定义为负数(通常为-1)。
因此函数getchar就设置成了int类型。
Getchar 和 putchar 是 C 语言中的两个用于输入输出的函数。
1. Getchar 函数原型Getchar 函数原型如下:```cint getchar(void);```Getchar 函数用于从标准输入流中读取一个字符,并返回该字符的ASCII 码值。
该函数没有参数,调用时直接使用 getchar() 即可。
2. Putchar 函数原型Putchar 函数原型如下:```cint putchar(int c);```Putchar 函数用于向标准输出流中输出一个字符。
它接受一个整型参数 c,代表要输出的字符的 ASCII 码值,返回值为输出的字符的 ASCII 码值。
调用时直接使用 putchar(c) 即可。
3. 区别Getchar 和 putchar 这两个函数在功能上相对简单,但是在实际使用中却有一些细微的差别。
- Getchar 用于从输入流中读取字符,因此它通常与循环配合使用,用于连续读取多个字符直至某个条件达成。
可以用 getchar 实现一个简单的输入回显功能,即用户输入什么程序就输出什么。
- Putchar 则用于向输出流中输出字符,因此它通常在需要逐个字符输出的情况下使用。
在实现一个输出函数中,可以通过 putchar 一个个输出字符,从而实现整个字符串的输出。
4. 使用示例下面通过一个简单的示例来展示 getcchar 和 putchar 的使用:```c// 从标准输入中读取字符,并输出到标准输出#include <stdio.h>int m本人n() {int c;printf("请输入一些字符(以回车结束):\n");while ((c = getchar()) != '\n') {putchar(c);}return 0;}```上面的代码中,通过循环不断调用 getchar 读取输入的字符,直至遇到换行符,然后通过 putchar 逐个输出这些字符。
C语言中的getchar和putchar详解一、首先给出《The_C_Programming_Language》这本书中的例子:#include <stdio.h>int main( ){int c;c = getchar();while (c != EOF){putchar();c= getchar();}return 0;}这里主要解释下为什么要用int型来接受getchar函数。
很多时候,我们会写这样的两行代码:char c;c = getchar();这样就很有可能出现问题。
因为getchar函数除了返回终端输入的字符外,在遇到Ctrl+D(Linux下)即文件结束符EOF时,getchar ()的返回EOF,这个EOF在函数库里一般定义为-1。
因此,在这种情况下,getchar函数返回一个负值,把一个负值赋给一个char型的变量是不正确的。
二、下面用一个题目来看其实如何获取字符和输出字符的。
#include "stdio.h"main(){char c,d,e,f;printf("please input two characters:\n");c=getchar();putchar(c);putchar('\n');d=getchar();putchar(d);putchar('\n');e=getchar();putchar(e);putchar('\n');f=getchar();putchar(f);putchar('\n');printf("c= %c\n",c);printf("d= %c\n",d);printf("e= %c\n",e);printf("f= %c\n",f);}运行后先输入“12”,回车,再输入“34”,回车。
C语⾔中的getchar和putchar的使⽤⽅法C语⾔中的getchar和putchar的使⽤⽅法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的原因。
#include <stdio.h>int main(){int c;c = getchar();while (c != EOF){putchar();c= getchar();}return 0;}这⾥主要解释下为什么要⽤int型来接受getchar函数。
getchar 非字符输入的返回值Getchar函数的返回值是什么?在C语言中,getchar函数被广泛用于从标准输入流或文件中读取一个字符。
它的返回值是该字符的对应的整数值。
但是,当我们输入一个非字符的值时,getchar函数会返回什么呢?我们需要明确一点,非字符的输入并不是指输入数字或其他符号,因为这些都可以通过ASCII码表转化为整数值或字符。
非字符的输入指的是那些不属于ASCII码表的字符,比如汉字、日文、韩文等等。
当我们输入这些字符时,getchar函数会返回一个负数值。
具体来说,当我们输入一个汉字时,getchar函数会返回一个-1的值。
这是因为汉字属于Unicode编码,而不是ASCII码表中的字符。
因此,getchar函数无法将其转化为对应的整数值或字符,只能返回一个负数值作为标识。
当我们输入其他非ASCII码表的字符时,getchar函数也会返回负数值,但具体的数值是不确定的,因为它们取决于编码方式的不同。
比如,使用UTF-8编码时,getchar函数会返回一个-30的值,而使用GBK编码时,会返回一个-42的值。
需要注意的是,不同的操作系统和编译器也可能会对getchar函数的返回值有所不同。
因此,在使用getchar函数时,我们需要根据具体情况进行处理,避免出现错误。
除此之外,getchar函数还有一些其他的特性和用法,比如可以结合循环语句实现输入多个字符,或者使用管道符和重定向符实现输入和输出的重定向。
这些都是我们在编程中需要注意的问题。
getchar函数的返回值是一个字符对应的整数值或负数值,具体的数值取决于输入的字符类型和编码方式的不同。
我们需要注意这些特性,避免在编程中出现错误。
getchar函数名: getchar功能: 从stdio流中读字符用法: int getchar(void);注解:getchar有一个int型的返回值.当程序调用getchar时.程序就等着用户按键.用户输入的字符被存放在键盘缓冲区中.直到用户按回车为止(回车字符也放在缓冲区中).当用户键入回车之后,getchar才开始从stdio流中每次读入一个字符.getchar函数的返回值是用户输入的第一个字符的ASCII码,如出错返回-1,且将用户输入的字符回显到屏幕.如用户在按回车之前输入了不止一个字符,其他字符会保留在键盘缓存区中,等待后续getchar调用读取.也就是说,后续的getchar调用不会等待用户按键,而直接读取缓冲区中的字符,直到缓冲区中的字符读完为后,才等待用户按键.getch与getchar基本功能相同,差别是getch直接从键盘获取键值,不等待用户按回车,只要用户按一个键,getch就立刻返回, getch返回值是用户输入的ASCII码,出错返回-1.输入的字符不会回显在屏幕上.getch函数常用于程序调试中,在调试时,在关键位置显示有关的结果以待查看,然后用getch函数暂停程序运行,当按任意键后程序继续运行.这个版本忽略了个重点,getch()是非缓冲输入函数,就是不能用getch()来接受缓冲区已存在的字符,如以下C++程序,int i;while(cin>>i);cin.clear();getchar();运行时如果输入1 2 3 a时必须用getchar()才能在后面程序获得正常输入,即使先前已经恢复流了,此处用getch()是万万不行的。
程序例:#include <stdio.h>int main(void){int c;int a;a = getch();printf ("%c",a);/* Note that getchar reads from stdin andis line buffered; this means it willnot return until you press ENTER. */while ((c = getchar()) != '\n'){printf("%c", c);}return 0;}注:可以利用getchar()函数让程序调试运行结束后等待编程者按下键盘才返回编辑界面,用法:在主函数结尾,return 0;之前加上getchar();即可。
getchar的返回值
Getchar的返回值
Getchar是C语言中的一个函数,用于从标准输入流(通常是键盘)
获取一个字符。
它的返回值是int类型,表示读入的字符的ASCII码值。
一、返回值范围
Getchar函数返回值的范围是0-255,对应了ASCII码表中所有可打
印字符和一些控制字符。
其中0-31为控制字符,32-126为可打印字符,127为DEL(删除)字符。
二、EOF
当读取到文件末尾或遇到错误时,Getchar函数会返回EOF(End Of File)常量。
这个常量在stdio.h头文件中定义为-1。
三、使用方法
Getchar函数可以用来读取单个字符或一行字符串。
读取单个字符时,可以直接使用getchar()函数;读取一行字符串时,则需要结合其他函
数使用。
四、示例代码
以下是一个简单的示例代码,演示了如何使用getchar函数从键盘输入一个字符并输出其ASCII码值:
#include <stdio.h>
int main() {
char ch;
printf("请输入一个字符:");
ch = getchar();
printf("该字符的ASCII码值为:%d\n", ch);
return 0;
}
五、注意事项
1. Getchar函数每次只能读取一个字符,并且会将回车符也当做一个有效的输入。
因此,在读取一行字符串时需要注意清除缓存区中多余的回车符。
2. 在Windows系统下,输入回车符时会同时输入一个换行符。
因此,如果要在Windows系统下读取一行字符串并在Linux系统下使用,
需要注意清除缓存区中的换行符。
3. 在使用getchar函数时,需要注意输入缓存区中是否有多余的字符。
如果有,则需要清除缓存区中的多余字符,否则可能会影响程序的正
常执行。
六、总结
Getchar函数是C语言中常用的一个函数,可以用于从标准输入流(通常是键盘)获取一个字符。
其返回值是int类型,表示读入的字符的ASCII码值。
在使用getchar函数时需要注意清除缓存区中多余的
字符,并且在读取一行字符串时需要注意清除缓存区中多余的回车符
和换行符。