c语言geychar,C语言中文网

发布时间:2022-11-22

本文目录一览:

  1. c语言getchar的用法
  2. getchar在c语言中是什么意思?
  3. c语言里getchar()是什么

c语言getchar的用法

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

一、getchar 的两点总结:

  1. getchar 是以行为单位进行存取的。 当用 getchar 进行输入时,如果输入的第一个字符为有效字符(即输入是文件结束符 EOF,Windows 下为组合键 Ctrl+Z,Unix/Linux 下为组合键 Ctrl+D),那么只有当最后一个输入字符为换行符 \n(也可以是文件结束符 EOF)时,getchar 才会停止执行,整个程序将会往下执行。例如下面程序段:
while ((c = getchar()) != EOF) {
    putchar(c);
}

执行程序,输入:abc,然后回车。则程序就会去执行 putchar(c),然后输出 abc,这个地方不要忘了,系统输出的还有一个回车。然后可以继续输入,再次遇到换行符的时候,程序又会把那一行的输入的字符输出在终端上。 对于 getchar,肯定很多初学的朋友会问,getchar 不是以字符为单位读取的吗?那么,既然我输入了第一个字符 a,肯定满足 while 循环 (c = getchar()) != EOF 的条件,那么应该执行 putchar(c) 在终端输出一个字符 a。不错,我在用 getchar 的时候也是一直这么想的,但是程序就偏偏不这样执行,而是必须读到一个换行符或者文件结束符 EOF 才进行一次输出。 对这个问题的一个解释是,在大师编写 C 的时候,当时并没有所谓终端输入的概念,所有的输入实际上都是按照文件进行读取的,文件中一般都是以行为单位的。因此,只有遇到换行符,那么程序会认为输入结束,然后采取执行程序的其他部分。同时,输入是按照文件的方式存取的,那么要结束一个文件的输入就需用到 EOF(End 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 函数返回的所有可能的值,正确的定义方法如下(KR C 中特别提到了这个问题):

int c;
c = getchar();

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

  1. EOF 作为文件结束符时的情况: EOF 虽然是文件结束符,但并不是在任何情况下输入 Ctrl+D(Windows 下 Ctrl+Z)都能够实现文件结束的功能,只有在下列的条件下,才作为文件结束符。
  • (1) 遇到 getchar 函数执行时,要输入第一个字符时就直接输入 Ctrl+D,就可以跳出 getchar(),去执行程序的其他部分;
  • (2) 在前面输入的字符为换行符时,接着输入 Ctrl+D;
  • (3) 在前面有字符输入且不为换行符时,要连着输入两次 Ctrl+D,这时第二次输入的 Ctrl+D 起到文件结束符的功能,至于第一次的 Ctrl+D 的作用将在下面介绍。 其实,这三种情况都可以总结为只有在 getchar() 提示新的一次输入时,直接输入 Ctrl+D 才相当于文件结束符。
  1. EOF 作为行结束符时的情况,这时候输入 Ctrl+D 并不能结束 getchar(),而只能引发 getchar() 提示下一轮的输入。 这种情况主要是在进行 getchar() 新的一行输入时,当输入了若干字符(不能包含换行符)之后,直接输入 Ctrl+D,此时的 Ctrl+D 并不是文件结束符,而只是相当于换行符的功能,即结束当前的输入。以上面的代码段为例,如果执行时输入 abc,然后 Ctrl+D,程序输出结果为:
abc
abc

注意:第一组 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:
*/
#include <stdio.h>
#include <stdlib.h>
int main(void) {
    int c;
    /* 终端驱动处于普通的一次一行模式 */
    system("stty raw");
    /* 现在的终端驱动处于一次一个字符模式 */
    c = getchar();
    putchar(c);
    /* 终端驱动处又回到一次一行模式 */
    system("stty cooked");
    return 0;
}

编译运行该程序,则当输入一个字符时,直接输出一个字符,然后程序结束。 由此可见,由于终端驱动的模式不同,造成了 getchar() 输入结束的条件不一样。普通模式下需要回车或者 EOF,而在一次一个字符的模式下,则输入一个字符之后就结束了。

getchar 在 C 语言中是什么意思?

getchar 是读入函数的一种。它从标准输入里读取下一个字符,相当于 getc(stdin)。返回类型为 int 型,为用户输入的 ASCII 码或 EOF。 它的作用是从 stdin 流中读入一个字符,也就是说,如果 stdin 有数据的话不用输入它就可以直接读取了,第一次调用 getchar() 时,确实需要人工的输入,但是如果输入了多个字符,以后的 getchar() 再执行时就会直接从缓冲区中读取了。

getchar 函数语法相关资料

  1. 函数声明
int getchar(void)
  1. 参数 NA
  2. 功能 C 库函数 int getchar(void) 从标准输入 stdin 获取一个字符(一个无符号字符)。这等同于 getc 带有 stdin 作为参数。
  3. 返回值 该函数以无符号 char 强制转换为 int 的形式返回读取的字符,如果到达文件末尾或发生读错误,则返回 EOF。
  4. 用法 该函数声明在 stdio.h 头文件中,使用的时候要包含 stdio.h 头文件。例如:
#include <stdio.h>
int getchar(void);

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;
}

扩展资料:

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

  • getchar() 函数是 C 语言专门为输入单个字符而提供的,getchar() 函数是从 I/O 字符流中读取一个字符,必须输入换行才能读入字符。
  • getche()getch() 函数也是读入单个字符,是从控制台直接读取一个字符,无须换行即可读入字符。
  • getchar() 是 C 的标准库函数,包含在头文件 stdio.h 中。
  • getche()getch() 需要的头文件是 conio.hconio.h 不是 C 标准库中的头文件。conio 是 Console Input/Output(控制台输入输出)的简写,其中定义了通过控制台进行数据输入和数据输出的函数,主要是一些用户通过按键盘产生的对应操作。
  • getchar() 函数从键盘读入字符时,输入的字符带回显,并且必须等到输入换行(按 Enter 键)才能读取一个字符。
  • getche() 函数从键盘读入字符时,输入的字符会回显到显示屏上,但是无须输入换行即可读取一个字符。
  • getch() 函数从键盘读入字符时,输入的字符不回显到显示屏上,但是无须输入换行即可读取一个字符。

参考资料来源: