C - 输入和输出


当我们说输入时,意味着将一些数据输入程序中。输入可以以文件的形式或从命令行给出。C 编程提供了一组内置函数来读取给定的输入并根据要求将其提供给程序。

当我们说输出时,它意味着在屏幕、打印机或任何文件中显示一些数据。C 编程提供了一组内置函数来将数据输出到计算机屏幕上以及将其保存在文本或二进制文件中。

标准文件

C 编程将所有设备视为文件。因此,显示器等设备的寻址方式与文件相同,并且当程序执行以提供对键盘和屏幕的访问时,会自动打开以下三个文件。

标准文件 文件指针 设备
标准输入 标准输入 键盘
标准输出 标准输出 屏幕
标准误 标准错误 你的屏幕

文件指针是访问文件以进行读写目的的方法。本节介绍如何从屏幕读取值以及如何在屏幕上打印结果。

getchar() 和 putchar() 函数

int getchar(void)函数从屏幕读取下一个可用字符并将其作为整数返回。该函数一次只能读取一个字符。如果您想从屏幕上读取多个字符,则可以在循环中使用此方法。

int putchar(int c)函数将传递的字符放在屏幕上并返回相同的字符。该函数一次只输入一个字符。如果您想在屏幕上显示多个字符,可以在循环中使用此方法。检查以下示例 -

#include <stdio.h>
int main( ) {

   int c;

   printf( "Enter a value :");
   c = getchar( );

   printf( "\nYou entered: ");
   putchar( c );

   return 0;
}

当上面的代码被编译并执行时,它会等待你输入一些文本。当您输入文本并按 Enter 键时,程序将继续读取单个字符并显示如下 -

$./a.out
Enter a value : this is test
You entered: t

gets() 和 put() 函数

char *gets(char *s)函数从stdin读取一行到s指向的缓冲区,直到出现终止换行符或 EOF(文件结束)。

int put(const char *s)函数将字符串 's' 和 'a' 尾随换行符写入stdout

注意:虽然已不推荐使用 gets() 函数,但您希望使用fgets()而不是使用 gets 。

#include <stdio.h>
int main( ) {

   char str[100];

   printf( "Enter a value :");
   gets( str );

   printf( "\nYou entered: ");
   puts( str );

   return 0;
}

当上面的代码被编译并执行时,它会等待你输入一些文本。当您输入文本并按 Enter 键时,程序将继续读取整行直到结束,并显示如下 -

$./a.out
Enter a value : this is test
You entered: this is test

scanf() 和 printf() 函数

int scanf(const char *format, ...) 函数从标准输入流stdin读取输入,并根据提供的格式扫描该输入。

int printf(const char *format, ...)函数将输出写入标准输出流stdout并根据提供的格式生成输出。

格式可以是简单的常量字符串,但可以指定%s、%d、%c、%f等,分别打印或读取字符串、整数、字符或浮点数还有许多其他可用的格式选项,可以根据要求使用。现在让我们继续看一个简单的例子来更好地理解这些概念 -

#include <stdio.h>
int main( ) {

   char str[100];
   int i;

   printf( "Enter a value :");
   scanf("%s %d", str, &i);

   printf( "\nYou entered: %s %d ", str, i);

   return 0;
}

当上面的代码被编译并执行时,它会等待你输入一些文本。当您输入文本并按 Enter 键时,程序将继续读取输入并将其显示如下 -

$./a.out
Enter a value : seven 7
You entered: seven 7

在这里,应该注意的是 scanf() 期望输入的格式与您提供的 %s 和 %d 相同,这意味着您必须提供有效的输入,例如“字符串整数”。如果您提供“字符串字符串”或“整数整数”,那么它将被视为错误输入。其次,在读取字符串时,scanf()一旦遇到空格就停止读取,因此“this is test”对于scanf()来说是三个字符串。