C/C++ IO小节

我们使用的很多函数实际上不是函数,而是宏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

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月9日 下午9:05
下一篇 2023年2月9日 下午9:05

相关推荐