【421】C语言输入输出函数说明
目录:
- sscanf & sprintf
- scanf & printf
- getchar & putchar
- fgets & fputs
- fscanf & fprintf
- fgetc & fputc
- fopen
- rewind
- fclose
1. sscanf & sprintf
sscanf 从字符串读取格式化输入。可以用来将字符串转换为数字,同时可以判断是否转换成功。通过返回值来判断是否转换成功。
【语法】int sscanf(const char *str, const char *format, ..pointers..)
- str:这是 C 字符串,是函数检索数据的源。【常量】
- format:这是 C 字符串,包含了以下各项中的一个或多个:空格字符、非空格字符 和 format 说明符。【常量】
format 说明符形式为 [=%[*][width][modifiers]type=] - 附加参数:这个函数接受一系列的指针作为附加参数,每一个指针都指向一个对象,对象类型由 format 字符串中相应的 % 标签指定,参数与 % 标签的顺序相同。【变量】
【返回值】如果成功,该函数返回成功匹配和赋值的个数。如果到达文件末尾或发生读错误,则返回 EOF。
#include <stdio.h>
int main() {
//-- string to int --//
char *num_str = "100";
int num;
// get the num from string
// Firstly, change string to num_str
// if successing, return numbers of assignment
if (sscanf(num_str, "%d", &num) == 1) {
printf("The number is %d.\n", num);
}
// output: The number is 100.
//-- get muliple numbers --//
char *date_today = "Monday July 1 2019";
int day, year;
char weekday[10], month[10];
// seperated by space
if (sscanf(date_today, "%s %s %d %d", weekday, month, &day, &year) == 4) {
printf("Today is %s %s %d %d.\n", weekday, month, day, year);
}
// output: Today is Monday July 1 2019.
// use comma
// function will trim space and tab automatically
// problem is that you should know the format before
// so you can add the format appropriately
char *date_today1 = " Monday, July, 1, 2019 ";
if (sscanf(date_today, "%s, %s, %d, %d", weekday, month, &day, &year) == 4) {
printf("Today is %s %s %d %d.\n", weekday, month, day, year);
}
// output: Today is Monday July 1 2019.
return 0;
}
sprintf 发送格式化输出到 str 所指向的字符串。可以用来将数字(各种格式)转化为字符串,同时可以判断是否转换成功。通过返回值来判断是否转换成功。
【语法】int sprintf(char *str, const char *format, ...)
- str:这是 C 字符串,是函数检索数据的源。
- format:这是字符串,包含了要被写入到字符串 str 的文本。它可以包含嵌入的 format 标签,format 标签可被随后的附加参数中指定的值替换,并按需求进行格式化。
format 说明符形式为 [=%[*][width][modifiers]type=]
说明:格式书写的方法与 prinf 类似,可以随便写。 - 附加参数:根据不同的 format 字符串,函数可能需要一系列的附加参数,每个参数包含了一个要被插入的值,替换了 format 参数中指定的每个 % 标签。参数的个数应与 % 标签的个数相同。
【返回值】如果成功,则返回写入的字符总数,不包括字符串追加在字符串末尾的空字符。如果失败,则返回一个负数。
#include <stdio.h>
int main() {
// get the numbers
int nums[5] = {1, 2, 3, 4, 5};
char str[20];
if (sprintf(str, "{%d, %d, %d, %d, %d}", nums[0], nums[1], nums[2], nums[3], nums[4]) > 0) {
printf("The string is %s.\n", str);
}
// output: The string is {1, 2, 3, 4, 5}.
// get addresses of numbers
char str_add[200];
if (sprintf(str_add, "\nnums[0]: %p \nnums[1]: %p \nnums[2]: %p \nnums[3]: %p \nnums[4]: %p",
&nums[0], &nums[1], &nums[2], &nums[3], &nums[4]) > 0) {
printf("The string is %s.\n", str_add);
}
// output:
// The string is
// nums[0]: 0x7fff737bfcb0
// nums[1]: 0x7fff737bfcb4
// nums[2]: 0x7fff737bfcb8
// nums[3]: 0x7fff737bfcbc
// nums[4]: 0x7fff737bfcc0.
return 0;
}
2. scanf & printf
scanf 从标准输入 stdin 读取格式化输入。可以用来将读取的字符串转换为数字,同时可以判断是否转换成功。通过返回值来判断是否转换成功。
与 sscanf 的区别:scanf 是标准 stdin 读取,即控制台输入或者文件读取,而 sscanf 则是从字符串读取,只要将字符串去掉,两者就一样了。
【语法】int scanf(const char *format, ..pointers..)
- format:这是 C 字符串,包含了以下各项中的一个或多个:空格字符、非空格字符 和 format 说明符。【常量】
format 说明符形式为 [=%[*][width][modifiers]type=] - 附加参数:这个函数接受一系列的指针作为附加参数,每一个指针都指向一个对象,对象类型由 format 字符串中相应的 % 标签指定,参数与 % 标签的顺序相同。【变量】
【返回值】如果成功,该函数返回成功匹配和赋值的个数。如果到达文件末尾或发生读错误,则返回 EOF。
// counts+.c
// reads an integer from stdin and counts
// prompts the user
#include <stdio.h>
#include <stdlib.h> int main(void) {
int num_start;
int num_end;
printf("Please input two numbers: "); // this line added to counts.c
if (scanf("%d%d", &num_start, &num_end) != 2) {
fprintf(stderr, "Usage: two numbers expected\n");
return EXIT_FAILURE;
} for (int i = num_start; i <= num_end; i++) {
printf("%d ",i);
}
printf("\n"); // output: // input from terminal
// alex@alex-VirtualBox:Blogs$ gcc scanf.c && ./a.out
// Please input two numbers: 5 10
// 5 6 7 8 9 10 // input from file
// alex@alex-VirtualBox:Blogs$ gcc scanf.c && ./a.out < input.txt
// Please input two numbers: 5 6 7 8 9 10 // input from echo
// alex@alex-VirtualBox:Blogs$ gcc scanf.c && echo 5 10 | ./a.out < input.txt
// Please input two numbers: 5 6 7 8 9 10 return EXIT_SUCCESS;
}
printf 发送格式化输出到标准输出 stdout。可以用来将数字(各种格式)转化为控制台输出或者输出到文件,同时可以判断是否输出成功。
与 sprintf 的区别:printf 是标准 stdout 输出,即控制台输出或者文件输出,而 sprintf 则是转为字符串,只要将字符串去掉,两者就一样了。
【语法】int printf(const char *format, ...)
- format:这是字符串,包含了要被写入到字符串 str 的文本。它可以包含嵌入的 format 标签,format 标签可被随后的附加参数中指定的值替换,并按需求进行格式化。
format 说明符形式为 [=%[*][width][modifiers]type=] - 附加参数:根据不同的 format 字符串,函数可能需要一系列的附加参数,每个参数包含了一个要被插入的值,替换了 format 参数中指定的每个 % 标签。参数的个数应与 % 标签的个数相同。
【返回值】如果成功,则返回写入的字符总数,否则返回一个负数。
3. getchar & putchar
getchar 从标准输入 stdin 获取一个字符(一个无符号字符)。这等同于 getc 带有 stdin 作为参数。
【语法】int getchar(void)
【返回值】该函数以无符号 char 强制转换为 int 的形式返回读取的字符,如果到达文件末尾或发生读错误,则返回 EOF。
putchar 把参数 char 指定的字符(一个无符号字符)写入到标准输出 stdout 中。
【语法】int putchar(int char)
- char:这是要被写入的字符。该字符以其对应的 int 值进行传递。
【返回值】该函数以无符号 char 强制转换为 int 的形式返回写入的字符,如果发生错误则返回 EOF。
【注意】同时可以通过控制台输入输出以及文件输入输出
#include <stdio.h>
int main() {
// getchar() will read characters one by one
// for this function, it will print the same characters untill it finds '\n'
char c = getchar();
while (c != '\n') {
putchar(c);
c = getchar();
}
putchar('\n');
// output:
// alex@alex-VirtualBox:Blogs$ gcc getchar.c && ./a.out
// alex lee
// alex lee
return 0;
}
4. fgets & fputs
fgets 从指定的流 stream 读取一行,并把它存储在 str 所指向的字符串内。当读取 (n-1) 个字符时,或者读取到换行符时,或者到达文件末尾时,它会停止,具体视情况而定。
【语法】char *fgets(char *str, int n, FILE *stream)
- str -- 这是指向一个字符数组的指针,该数组存储了要读取的字符串。
- n -- 这是要读取的最大字符数(包括最后的空字符)。通常是使用以 str 传递的数组长度。
- stream -- 这是指向 FILE 对象的指针,该 FILE 对象标识了要从中读取字符的流。
【返回值】如果成功,该函数返回相同的 str 参数。如果到达文件末尾或者没有读取到任何字符,str 的内容保持不变,并返回一个空指针。如果发生错误,返回一个空指针。
#include <stdio.h>
#include <stdlib.h> int main(){
// read from terminal
char str_terminal[20];
fgets(str_terminal, 20, stdin);
// '\n' is also included
printf("Read from terminal is %s.\n", str_terminal); // output:
// alex lee
// Read from terminal is alex lee
// . // read from file
char str_file[20]; FILE *fp;
fp = fopen("file.txt", "r"); fgets(str_file, 20, fp);
printf("Read from file is %s.\n", str_file); fclose(fp); // output:
// alex lee
// Read from terminal is alex lee return 0;
}
fputs 把字符串写入到指定的流 stream 中,但不包括空字符。
【语法】int fputs(const char *str, FILE *stream)
- str -- 这是一个数组,包含了要写入的以空字符终止的字符序列。
- stream -- 这是指向 FILE 对象的指针,该 FILE 对象标识了要被写入字符串的流。
【返回值】该函数返回一个非负值,如果发生错误则返回 EOF。
#include <stdio.h>
#include <stdlib.h> int main(){
FILE *fp;
fp = fopen("file.txt", "w+");
fputs("This is C programming lnaguage.\n", fp);
fputs("This is a kind of programming languages.\n", fp);
fclose(fp); // outputs:
// alex@alex-VirtualBox:Blogs$ gcc fputs.c && ./a.out && more file.txt
// This is C programming language.
// This is a kind of programming languages. return 0;
}
5. fscanf & fprintf
fscanf 发送格式化输出到流 stream 中。
【语法】int fscanf(FILE *stream, const char *format, ..pointer..)
- stream:这是指向 FILE 对象的指针,该 FILE 对象标识了流。
- format:这是 C 字符串,包含了以下各项中的一个或多个:空格字符、非空格字符 和 format 说明符。
format 说明符形式为 [=%[*][width][modifiers]type=] - 附加参数:根据不同的 format 字符串,函数可能需要一系列的附加参数,每个参数包含了一个要被插入的值,替换了 format 参数中指定的每个 % 标签。参数的个数应与 % 标签的个数相同。
【返回值】如果成功,该函数返回成功匹配和赋值的个数。如果到达文件末尾或发生读错误,则返回 EOF。
【注意】其实与 scanf 或者 sscanf 都类似,只是这个要从文件读取,并且占用参数位置。
#include <stdio.h>
#include <stdlib.h> int main(){
char str1[10], str2[10], str3[10];
int year;
FILE *fp; fp = fopen("file.txt", "w+");
fputs("We are in 2019", fp); // set the file position to the beginning
// of the file of the given stream
rewind(fp);
fscanf(fp, "%s %s %s %d", str1, str2, str3, &year); printf("Read String1 |%s|\n", str1);
printf("Read String2 |%s|\n", str2);
printf("Read String3 |%s|\n", str3);
printf("Read String4 |%d|\n", year); fclose(fp); // output:
// Read String1 |We|
// Read String2 |are|
// Read String3 |in|
// Read String4 |2019| return 0;
}
fprintf 发送格式化输出到流 stream 中。
【语法】int fprintf(FILE *stream, const char *format, ...)
- stream -- 这是指向 FILE 对象的指针,该 FILE 对象标识了流。
- format -- 这是 C 字符串,包含了要被写入到流 stream 中的文本。它可以包含嵌入的 format 标签,format 标签可被随后的附加参数中指定的值替换,并按需求进行格式化。format 标签属性是 %[flags][width][.precision][length]specifier
- 附加参数 -- 根据不同的 format 字符串,函数可能需要一系列的附加参数,每个参数包含了一个要被插入的值,替换了 format 参数中指定的每个 % 标签。参数的个数应与 % 标签的个数相同。
【返回值】如果成功,则返回写入的字符总数,否则返回一个负数。
【注意】包括 stderr,stdout,标准输入则为 stdin
#include <stdio.h>
#include <stdlib.h> int main(){
FILE *fp;
fp = fopen("file.txt", "w+");
fprintf(fp, "%s %s %s %d", "We", "are", "in", 2019); fclose(fp); // output:
// alex@alex-VirtualBox:Blogs$ gcc fprintf.c && ./a.out && more file.txt
// We are in 2019 return 0;
}
【421】C语言输入输出函数说明的更多相关文章
- c语言输入输出函数
上学年学习c语言的时候比较匆忙,没好好吸收. 现在有时间好好复习下. 本文就c语言常见输入函数进行简单介绍,对比. ps:由于自己能力有限,时间有限,多数介绍,总结都是摘录网上相关学习资料,下面给出本 ...
- C语言——输入输出函数
0.getchar().putchar() 输入缓冲区,键盘输入是"行缓冲"遇到一个换行符的时候清空缓冲区. 标准流,stdin和stdout,是标准的输入输出流,键盘输入就是用的 ...
- C语言输入输出函数总结
常见函数: FILE *p char ch char buf[max] fopen("filename","ab")//打开名为filename的文件并返回一个 ...
- c语言的输入输出函数
参考文章: http://blog.sina.com.cn/s/blog_784f40b80100psg9.html C语言输入输出函数分为两类: 1.格式化输入输出函数 2.非格式化输入输出 --- ...
- C语言中最常用的三种输入输出函数scanf()、printf()、getchar()和putchar()
本文给大家介绍C语言中最常用的三种输入输出函数scanf().printf().getchar()和putchar(). 一.scanf()函数格式化输入函数scanf()的功能是从键盘上输入数据,该 ...
- C语言学习<输入输出函数,函数的调用>
#include <stdio.h> /* 输入输出函数的学习 函数的调用 2017.05.25 soulsjie */ //输入连个数字求最大值 void main(){ int Max ...
- C语言中输入输出函数
1.1.1 格式化输入输出函数Turbo C2.0 标准库提供了两个控制台格式化输入. 输出函数printf() 和scanf(), 这两个函数可以在标准输入输出设备上以各种不同的格式读写数据.pri ...
- C语言 · 字符串输入输出函数
算法提高 3-2字符串输入输出函数 时间限制:1.0s 内存限制:512.0MB 描述 编写函数GetReal和GetString,在main函数中分别调用这两个函数.在读入一个实数 ...
- C++中的字符串的输入输出函数、空字符与空格的区别、字符变量赋值和字符串初始化
一.字符串输入输出函数 1. cin.get() 逐个字符输入输出 2. cin 可以将整个字符串一次性输入,但是,cin将空格.Tab和回车键,因此不能用于数组的一次性输入. 注意:ci ...
随机推荐
- Android中sp和px之间关系探究
记得当时在刚接触Android时都在说不要用px,要用sp,所以在实际工作当中当然就按照这个规则,所以都要将px换算成sp,而我在实际工作中的换算规则是dp=px * 1.5,而且用这种规则到现在基本 ...
- JDBC课程3--通过ResultSet执行查询操作
内容: ResultSet 结果集,封装了使用JDBC 进行查询;JDBCTools.release(rs,st, conn); 这个模块进行了更新, 同时结束的时候也关闭ResultSet,结束该 ...
- 混合应用 微信登录授权 微信登录认证失败 ios PGWXAPI错误-1 code:-100 / 安卓 message:invalid appsecret innerCode:40125
最近项目需要做微信登录,于是利用HTML5+ API Reference的OAuth模块管理客户端的用户登录授权验证功能,允许应用访问第三方平台的资源.(链接:https://www.dcloud.i ...
- DOM设置css样式
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...
- 02_Tutorial 2: Requests and Responses 请求和响应
1.请求和响应 1.文档 https://www.django-rest-framework.org/tutorial/2-requests-and-responses/ https://q1mi.g ...
- mongodb中帮助信息和命令
在Mongodb中,可以看作是一种面向对象的操作,如果你对与某一个操作不清楚,可以直接help. 在mongodb中,无非是对DB.user.collections.文档的操作. 下面是简单的示例: ...
- 后缀数组 TYVJ P1860 后缀数组
/*P1860 后缀数组时间: 1000ms / 空间: 131072KiB / Java类名: Main描述 我们定义一个字符串的后缀suffix(i)表示从s[i]到s[length(s)]这段子 ...
- (4)打鸡儿教你Vue.js
模板语法: <div id="app"> <p>{{ message }}</p> </div> html 使用 v-html 指令 ...
- kubectl 日常命令 备忘
目录 kubectl 常用命令 自动补全 Kubectl命令概览 常用命令分类 常用命令 声明式资源对象管理 查看资源状态 容器管理 集群管理 常用命令英文缩写 kubectl 常用命令 自动补全 使 ...
- codeforces#1257 F. Make Them Similar ( 经典中间相遇问题 )
题目链接: http://codeforces.com/contest/1257/problem/F 题意: 给出$n$个30位整数 找到一个数,让它与这$n$个数分别异或,得到的$n$个数二进制1的 ...