//输入&输出 /* 当我们提到输入时,这意味着要向程序填充一些数据。输入可以是以文件的形式或从命令行中进行。 C 语言提供了一系列内置的函数来读取给定的输入,并根据需要填充到程序中。 当我们提到输出时,这意味着要在屏幕上、打印机上或任意文件中显示一些数据。 C 语言提供了一系列内置的函数来输出数据到计算机屏幕上和保存数据到文本文件或二进制文件中。 */ //标准文件 /* C 语言把所有的设备都当作文件。所以设备(比如显示器)被处理的方式与文件相同。 以下三个文件会在程序执行时自动打开,以便访问键盘和屏幕。 标准文件 文件指针 设备 标准输入 stdin 键盘 标准输出 stdout 屏幕 标准错误 stderr 屏幕 C 语言中的 I/O (输入/输出) 通常使用 printf() 和 scanf() 两个函数。 scanf() 函数用于从标准输入(键盘)读取并格式化, printf() 函数发送格式化输出到标准输出(屏幕)。 */ #include <stdio.h> //执行printf需要该库 int main01() { printf("i love matsuri"); // i love matsuri return 0; } /* 实例解析: 所有的 C 语言程序都需要包含 main() 函数。 代码从 main() 函数开始执行。 printf() 用于格式化输出到屏幕。printf() 函数在 "stdio.h" 头文件中声明 stdio.h 是一个头文件 (标准输入输出头文件) and #include 是一个预处理命令,用来引入头文件。 当编译器遇到 printf() 函数时,如果没有找到 stdio.h 头文件,会发生编译错误。 return 0; 语句用于表示退出程序。 */ //%d 格式化输出整数 #include <stdio.h> int main02() { int testInteger = 5; printf("Number = %d", testInteger); //Number = 5 return 0; } //%f 格式化输出浮点型数据 int main03() { float f; printf("Enter a number: "); // %f 匹配浮点型数据 scanf("%f",&f); printf("Value = %f", f); return 0; /* Enter a number: 1.00 Value = 1.000000 */ } //getchar() & putchar() 函数 /* int getchar(void) 函数从屏幕读取下一个可用的字符,并把它返回为一个整数。 这个函数在同一个时间内只会读取一个单一的字符。可以在循环内使用这个方法,以便从屏幕上读取多个字符。 int putchar(int c) 函数把字符输出到屏幕上,并返回相同的字符。 这个函数在同一个时间内只会输出一个单一的字符。可以在循环内使用这个方法,以便在屏幕上输出多个字符。 */ int main04( ) { int c; printf( "Enter a value :"); c = getchar( ); printf( "You entered: "); putchar( c ); return 0; /* Enter a value :c You entered: c */ //c=getchar()这个过程会阻塞,只能接收一个字符,输入值之后,会将值赋值给c //putchar()从函数名也能看出来打印char类型,所以不需要%c,直接将char类型字符放进去,便会自动打印 } //gets() & puts() 函数 /* char *gets(char *s) 函数从 stdin 读取一行到 s 所指向的缓冲区,直到一个终止符或 EOF。 int puts(const char *s) 函数把字符串 s 和一个尾随的换行符写入到 stdout。 */ int main05( ) { char str[100]; printf( "Enter a value :"); gets( str ); printf( "You entered: "); puts( str ); return 0; /* Enter a value :i love matsuri You entered: i love matsuri */ //gets、puts和getchar、putchar类似,从名字可以看出,gets和puts是针对字符串的,s则代表str //gets(str)接收一个字符数组,和scanf不一样,这个不需要传入指针,直接传入字符数组 //输入值之后,会自动将值赋给字符数组 //puts(str),也只接收一个字符数组,并且具有printf功能,不需要加%s } //scanf和printf /* scanf很早就应该介绍了,printf当然经常用 int scanf(const char *format, ...) 函数从标准输入流 stdin 读取输入,并根据提供的 format 来浏览输入。 int printf(const char *format, ...) 函数把输出写入到标准输出流 stdout ,并根据提供的格式产生输出。 format 可以是一个简单的常量字符串,可以分别指定 %s、%d、%c、%f 等来输出或读取字符串、整数、字符或浮点数。 */ #include <stdio.h> int main06( ) { char str[100]; int i; printf( "Enter a value :"); scanf("%s %d", str, &i); printf( "You entered: %s %d ", str, i); return 0; /* Enter a value :matsuri 2 You entered: matsuri 2 */ //关于scanf,整型,浮点型,字符型等等都是要取地址,表示将值赋值给该地址指向的内存 //但是字符数组就不必要了,因为它本来就表示首元素的地址 //并且这种形式,scanf遇见空格就会停止读取 //比如我希望输入i love matsuri 1,但是scanf遇见第一个空格就结束了 } //笔记 /* 关于之前说的gets和puts,建议使用fgets和fputs代替,会更加安全 */ //有关putchar int main() { char x='a'; putchar(x); printf("\n"); putchar(97); /* a a */ //两个运行结果相同,因为将一个字符赋给字符变量和将字符的 ASCII 代码赋给字符变量作用是完全相同的 //但要注意其值必须在字符的 ASCII 代码范围内。 //当然用printf以%c打印数字也是可以的 printf("\n%c--%d\n", 106, 106); //j--106 }