我们使用的很多函数实际上不是函数,而是宏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已经足够了。
浙公网安备 33010602011771号