力能扛鼎的冰棍 · GitLab修改root用户密码 - ...· 11 月前 · |
微醺的红茶 · 服务端向Web前端推送数据的几种方式_GhD ...· 1 年前 · |
很拉风的西红柿 · 如何在spark中检查某一行的值是否为空?· 1 年前 · |
伤情的香菜 · python - How to set ...· 1 年前 · |
爽快的哑铃 · time - Making a ...· 1 年前 · |
当我们提到 输入 时,这意味着要向程序填充一些数据。输入可以是以文件的形式或从命令行中进行。C 语言提供了一系列内置的函数来读取给定的输入,并根据需要填充到程序中。
当我们提到 输出 时,这意味着要在屏幕上、打印机上或任意文件中显示一些数据。C 语言提供了一系列内置的函数来输出数据到计算机屏幕上和保存数据到文本文件或二进制文件中。
C 语言把所有的设备都当作文件。所以设备(比如显示器)被处理的方式与文件相同。以下三个文件会在程序执行时自动打开,以便访问键盘和屏幕。
标准文件文件指针设备 标准输入stdin键盘 标准输出stdout屏幕 标准错误stderr您的屏幕文件指针是访问文件的方式,本节将讲解如何从键盘上读取值以及如何把结果输出到屏幕上。
C 语言中的 I/O (输入/输出) 通常使用 printf() 和 scanf() 两个函数。
scanf() 函数用于从标准输入(键盘)读取并格式化, printf() 函数发送格式化输出到标准输出(屏幕)。
编译以上程序,输出结果为:
实例解析:
编译以上程序,输出结果为:
Number = 5 在 printf() 函数的引号中使用 "%d" (整型) 来匹配整型变量 testInteger 并输出到屏幕。
int getchar(void) 函数从屏幕读取下一个可用的字符,并把它返回为一个整数。这个函数在同一个时间内只会读取一个单一的字符。您可以在循环内使用这个方法,以便从屏幕上读取多个字符。
int putchar(int c) 函数把字符输出到屏幕上,并返回相同的字符。这个函数在同一个时间内只会输出一个单一的字符。您可以在循环内使用这个方法,以便在屏幕上输出多个字符。
请看下面的实例:
当上面的代码被编译和执行时,它会等待您输入一些文本,当您输入一个文本并按下回车键时,程序会继续并只会读取一个单一的字符,显示如下:
$./a.out Enter a value :runoob You entered: rchar *gets(char *s) 函数从 stdin 读取一行到 s 所指向的缓冲区,直到一个终止符或 EOF。
int puts(const char *s) 函数把字符串 s 和一个尾随的换行符写入到 stdout 。
当上面的代码被编译和执行时,它会等待您输入一些文本,当您输入一个文本并按下回车键时,程序会继续并读取一整行直到该行结束,显示如下:
$./a.out Enter a value :runoob You entered: runoobint scanf(const char *format, ...) 函数从标准输入流 stdin 读取输入,并根据提供的 format 来浏览输入。
int printf(const char *format, ...) 函数把输出写入到标准输出流 stdout ,并根据提供的格式产生输出。
format 可以是一个简单的常量字符串,但是您可以分别指定 %s、%d、%c、%f 等来输出或读取字符串、整数、字符或浮点数。还有许多其他可用的格式选项,可以根据需要使用。如需了解完整的细节,可以查看这些函数的参考手册。现在让我们通过下面这个简单的实例来加深理解:
当上面的代码被编译和执行时,它会等待您输入一些文本,当您输入一个文本并按下回车键时,程序会继续并读取输入,显示如下:
$./a.out Enter a value :runoob 123 You entered: runoob 123在这里,应当指出的是,scanf() 期待输入的格式与您给出的 %s 和 %d 相同,这意味着您必须提供有效的输入,比如 "string integer",如果您提供的是 "string string" 或 "integer integer",它会被认为是错误的输入。另外,在读取字符串时,只要遇到一个空格,scanf() 就会停止读取,所以 "this is test" 对 scanf() 来说是三个字符串。
ms0
261***255@qq.com
(1)换行符就是另起一行 --- ' \n ' 10 换行(newline)
(2)回车符就是回到一行的开头 --- ' \r ' 13 回车(return)
CR: 回车(Carriage Return) \rLF: 换行(Line Feed) \n
(1)在微软的MS-DOS和Windows中,使用“回车CR('\r')”和“换行LF('\n')”两个字符作为换行符;
(2)Windows系统里面,每行结尾是 回车+换行(CR+LF),即“\r\n”;
Mac OS 9 以及之前的系统的换行符是 CR,从 Mac OS X (后来改名为“OS X”)开始的换行符是 LF即‘\n',和Unix/Linux统一了。
(1)一个直接后果是,Unix/Mac系统下的文件在Windows里打开的话,所有文字会变成一行;
(2)而Windows里的文件在Unix/Mac下打开的话,在每行的结尾可能会多出一个^M符号。
(3)Linux保存的文件在windows上用记事本看的话会出现黑点。
在linux下,命令unix2dos 是把linux文件格式转换成windows文件格式,命令dos2unix 是把windows格式转换成linux文件格式。
在不同平台间使用FTP软件传送文件时, 在ascii文本模式传输模式下, 一些FTP客户端程序会自动对换行格式进行转换. 经过这种传输的文件字节数可能会发生变化.
halo
g51***vip.qq.com
CSTwang
248***3362@qq.com
在进行输出时,若要用到用来输出实数的 f 格式符(以小数形式输出),有以下几种用法:
1、基本型,用 %f
不指定输出类型的长度,用系统根据情况决定,一般是实数中的整数部分全部输出,小数部分输出六位。例:
#include<stdio.h> int main() double a=1.0; printf("%f\n",a/3); return 0;运行结果:0.333333
2、指定数据宽度和小数位数,用 %m.nf
例:将上个程序的双精度变量 a 输出 15 位小数,用 %20.15f 的格式声明,指定输出的数据占 20 列,其中包括 15 位小数。改动上面程序如下:
#include<stdio.h> int main() double a=1.0; printf("%20.15f\n",a/3); return 0;运行结果: 0.333333333333333
注意在 0 的前面有 3 个空格,且双精度数只保证 15 位有效数字的准确性。
3、输出的数据相左对齐,用 %-m.nf
在 m.n 前加一个负号,其作用与 %m.nf 形式作用基本相同,但当数据长度不长过 m 时,数据向左靠,右端补空格。
CSTwang
248***3362@qq.com
先后输出BOY三个字符。
#include<stdio.h> int main() char a='B',b='O',c='Y'; putchar(a); putchar(b); putchar(c); putchar('\n'); return 0;#include<stdio.h> int main() int a=66,b=79,c=89; putchar(a); putchar(b); putchar(c); putchar('\n'); return 0;两个运行结果相同,因为将一个字符赋给字符变量和将字符的 ASCII 代码赋给字符变量作用是完全相同的,但要注意其值必须在字符的 ASCII 代码范围内。
Jiangang
121***5109@qq.com
#include <stdio.h> #include <stdlib.h> int main() int a; int b; int c; printf("请输入三个整数:"); int x=scanf("%d%d%d",&a,&b,&c); printf("d%\n%d\n",a,x);测试输出:
$ ./a.out 请输入三个整数:1 2 3$ ./a.out 请输入三个整数:5 6 d
- 1、scanf() 函数有返回值且类型 int 型,当发生错误时立刻返回 EOF。
- 2、scanf() 函数返回的值为:正确按指定格式输入变量的个数;也即能正确接收到值的变量个数。
从上边的例子中可以得到验证,这里用变量 x 接收 scanf() 函数的返回值,并输出显示出来。
极地
160***8722@qq.com
dte2mdj
awe***5@qq.com
返回值:成功,则函数返回 buf。
如果当尝试读取一个字符时遇到了文件结尾,则 eof 被置位(feof),如果还没有成功读入任何一个字符就遇到了文件结尾,那么就会返回 null,buff 中的内容保持不变。如果读取错误发生,那么 error indicator(ferror) 被置位,还是返回 null。
c 语言中每种数据类型的输出都有各自的占位符,下面是各种数据类型的输出占位符:
short/int : %d
int a = 1; printf("这个整数是:%d", a);
long: %ld (long 是 int 得修饰,不能算是一种单独的数据类型,只是比 int 多了四个字节的存储空间)
long long : %lld
char : %c
float/double : %f float 默认是 6 位小数输出;可以在 %f 中控制;例如:%.2f:输出两位小数。
char *s(字符串) : %s
unsigned: %u (signed:有符号类型, unsigned:无符号类型;默认都是有符号的)
八进制: %o 以 0 开头
十六进制: %x 以 0x 开头
int a = 10; printf("a的八进制输出是:%o \n", a);//输出是12 printf("a的十六进制输出:%x \n", a);//输出是a地址值/指针值:%p,* 取指针里地址指向的地方的值,& 取改值存储位置的地址值。
二进制的输出没有占位符,只能通过其他方法。
很拉风的西红柿 · 如何在spark中检查某一行的值是否为空? 1 年前 |