涉及 getchar() 和 putchar() 意外输出的 C 简单代码

问题描述

当我在学习书中的一个例子时,

'use strict';
require('dotenv').config();
const mongoose = require('mongoose')
const express = require('express');
const bodyParser = require('body-parser');
const cors = require('cors');
const app = express();
const cookieParser = require('cookie-parser');

//Import Routes
const userRoute = require('./routes/user')

app.use(cors({origin: 'http://localhost:3001',credentials: true }));
app.use(bodyParser.json());
app.use(cookieParser())
app.use('/account',userRoute);

//connect to db
mongoose.connect(
    process.env.DB_CONNECTION,{
        useUnifiedTopology: true,useNewUrlParser: true
    },() => console.log('connected to db!')
);

app.listen(3000,()=>{
    console.log("***********************************");
    console.log("API server listening at localhost:3000");
    console.log("***********************************");
  });

我认为先读取字符,然后打印它会更有意义,因此在左右切换 ​​putchar 和 getchar

#include <stdio.h>

main()
{
        int c;

        c = getchar();
        while (c != EOF) {   
                putchar(c)
                c = getchar();
        }
}

现在当我运行它时,会发生什么是 putchar 的第一个输出缺少 c 的第一个字符?这是输出:

c = getchar();
putchar(c);

这很有趣,为什么会发生这种情况?

解决方法

因为您在循环之前获得一个字符。这意味着 c 等于第一个字符,但在循环中它会获取之后的每个字符。所以,

Get: f
Start the loop
Get: i
Print: i
And so on
,

问题是现在您没有打印在循环之前使用 getchar() 读取的字符,因此您没有打印第一个字符。

如果您想先执行 getchar(),请将其放入 while() 条件中。

#include <stdio.h>

main()
{
    int c;

    while ((c = getchar()) != EOF) {   
        putchar(c)
    }
}

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...