我们使用的很多函数实际上不是函数,而是宏macro。
例如:(getc()、putc()实际上也不是函数)
#define getchar() getc(stdin)
#define putchar((c)) putc((c), stdout)
总结C语言的输入输出:
#include <cstdio>
#include <iostream>
using namespace std;
int main(){
//注意,声明为int,因为int范围比char要大
int ch;
//从stdin中获得一个char
ch = getchar();
//把ch输出到stdout
putchar(ch);
//把内容输出到stdout
printf("hello, %s\n", "morgan");
//把内容输出到buf中
char buf[1000];
sprintf(buf,"hello, %s","lulu");
//把内容输出到文件指针fp所指的"文件"上,linux上任何设备都是"文件"
FILE *fp = fopen("C:\\test.txt","rw");
fprintf(fp,"Hello, world!\n");
//从stdin中读取数据
int score;
char course[100];
scanf("%d %s", &score, course);
//从指定字符串中读取数据
sscanf("95 C++", "%d %s", &score, course);
//从指定文件流中读取数据
fscanf(fp, "%d %s", &score, course);
/**********行输入输入出**********/
//把buf的内容作为一行输出到stdout
//fputs(char* line, FILE* fp)跟puts()区别略大,puts()会自动加个换行在后面呢
puts(buf);
//从stdin中读一行到buf
//fgets(char* line, int maxline, FILE* fp)跟gets()区别略大,gets()不会吃了(就是读取)最后的换行
gets(buf);
return 0;
}
很常见的一个问题,上次查了好久:
一行数据里面有好些个单词,逐个读出来进一步处理(每个单词由空格隔开,最后按回车结束这一行)。
思路:while循环读取每一个单词,但while循环结束条件是什么呢?scanf("%s",word)==0;吗?
不是的!应该这样:
#include <cstdio>
#include <iostream>
using namespace std;
int main(){
char buf[100];
while(scanf("%s",buf)){
printf("%s\n",buf);
//要不就把空格给吃掉,不会影响到上面buf数据的读取
//要不就读到换行,直接退出循环。
if(getchar()=='\n') break;
}
return 0;
}
C++的后面再总结,目测C的IO已经足够了。
原文链接: https://www.cnblogs.com/morgan-yuan/archive/2013/04/06/3002871.html
欢迎关注
微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/83430
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!