K&R 练习 1-20 编程语言第二版

2023-12-11

我应该在这个程序中做什么。我无法理解。
问题是:编写一个程序 detab,用正确的数字替换输入中的制表符 空格到下一个制表位的空间。假设有一组固定的制表位,例如每 n 列。 n 应该是变量还是符号参数?
我首先将制表符('\t')替换为空格('')。 但我想这是错误的做法。 请建议?
顺便说一句,n 应该是什么?变量或符号参数?

到目前为止的代码:

#include<stdio.h>
#define TAB 5
int main() {
    int i, c;
    while((c = getchar()) != EOF) {
        if(c == '\t') {
            for(i = 0; i < TAB; ++i)
                putchar(' ');
        } else
            putchar(c);
    }
    return 0;
}

在本练习中发布的所有问题中,我无法理解其含义。


这是我的最终代码,请告诉我是否有任何问题/错误。我认为它应该正常工作。
感谢@Nit、@Chrono Kitsune、@dasblinkenlight 以及所有其他提供帮助的人。

#include<stdio.h>
#define TAB 8
int main() {
int c, count = 0, space = 0;
while((c = getchar()) != EOF) {

    if(c == '\t') {
        space = (TAB - (count % TAB));
        while(space > 0){
            putchar(' ');
            count++;
            space--;
        }
    }
    else{
        putchar(c);
        ++count;
    }

    if(c == '\n')
        count = 0;
}
return 0;
}

您所做的并不是练习希望您做的:您不应该为每个选项卡插入固定数量的空格,而应该根据到目前为止已在该行上打印的数量插入不同数量的空格。

如何获取每个制表符的空格数并不重要 - 将其设为预处理器常量的方式非常好。然而,与其生产TAB空格,无论在哪里'\t'已经找到,您的程序需要计算已打印了多少“常规”字符,并在看到时计算需要多少个空格'\t'.

做一个变量count对于到目前为止打印的字符。将其初始化为零,然后每次看到'\n'特点。你打电话时putchar, 还使count++.

现在当你看到一个选项卡时'\t'计算距离下一个制表位有多远。其表达方式为

TAB - (count % TAB)

这就是您需要打印的空格数。

这应该足以让您返回并修复程序 - 我认为您只需要编写另外五行代码(不计算需要插入的大括号行)即可完成此练习。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

K&R 练习 1-20 编程语言第二版 的相关文章

  • C语言中的递归是如何工作的?

    我试图了解 C 中递归的工作原理 任何人都可以给我解释控制流吗 include
  • WP8.1 C# 绑定联系人图像

    信息很简单 我正在尝试创建一个可以显示用户联系人的应用程序 我也是一名自学成才的程序员 所以我在某些方面有编程经验 但总体来说我对数据绑定相对较新 首先 我有一个 ListView 控件 其中包含图像绑定
  • 使用 JSON 格式正确配置 NLog 到 IHostBuilder

    我有以下代码 应该接受 NLog 的 JSON appsettings 配置 然后使用它来创建 NLog LogFactory 这个 NLog 工厂应该被传递到 MyService 类中 以便在那里创建一个记录器 class Program
  • 在调用堆栈中看到大量 clr!CLR Semaphore::Wait

    我们看到很多像下面这样的调用堆栈 我可以知道什么条件 情况会发生这种情况吗 OS Thread Id 0x48654 559 Current frame ntdll NtWaitForSingleObject 0xa Child SP Re
  • 代码块 power 函数在 c 中不起作用

    我正在使用代码块来学习c 我的代码是 include
  • Confuser .NET 混淆器。安全吗? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我目前正在开发一个应用程序 其中阻止用户反编译代码非常重要 现在 我意识到 如果由经验丰富的程序员执行 大多数 exe 都是可反编译的
  • 在 C# 中调用事件处理程序

    我一直在尝试学习如何在 C 中使用事件处理程序 但我无法弄清楚 handler this e 在以下代码中的作用 public event EventHandler ThresholdReached protected virtual vo
  • 无缝滚动瓷砖地图

    我正在开发一个自上而下的角色扮演游戏 并且想要实现无缝滚动地图 也就是说 当玩家探索世界时 地图之间没有加载屏幕 也没有通往下一个区域的 门 我有两种方法可以打破世界 在顶层 我有 区域 它只是 9 个 地图 的集合 这些区域仅由目录表示
  • 有没有办法将 boost::json::serializer 切换为美化输出?

    Using boost json serializer如中的示例所示文档 快速查看 http vinniefalco github io doc json json usage quick look html以紧凑格式保存 json tre
  • 如何填充两个样条线或直线系列之间的区域

    我有这个Chart 如何填充两个之间的区域Series S0 and S1 说蓝色和黄色Series 为此 我们编写了其中之一Paint事件 这里的ValueToPixelPosition https msdn microsoft com
  • C++ 错误:从“char”到“const char*”的转换无效

    我对 C 完全陌生 我创建了这个函数 bool guessWord string compWord cout lt lt Guess a letter string userLetter cin gt gt userLetter for u
  • printf() 使用字符串表“解码器环”调试库

    我写这封信是想看看你们中是否有人见过或听说过我即将描述的想法的实现 我有兴趣为嵌入式目标开发 printf 风格的调试库 目标非常遥远 并且我和目标之间的通信带宽预算非常紧张 因此我希望能够以非常有效的格式获取调试消息 通常 调试语句如下所
  • 带有自定义鉴别器的 EntityFramework Code First 继承

    我正在尝试在 EntityFramework Code First 中映射以下继承 public class Member public string ProjectName get set public string AssemblyNa
  • 从 exit() 和 fork() 返回的结果奇怪地发生了位移

    我有一个 C 代码 有时会自行分叉 每个分叉都会执行一些操作 然后返回一个错误代码 目前 每个子进程返回其 ID 0 n void other int numero exit numero int main for int i 0 i lt
  • C# Julian 日期解析器

    我在电子表格中有一个单元格 它是 Excel 中的日期对象 但当它来自 C1 的 xls 类时 它会变成双精度型 类似于 2009 年 1 月 7 日的 39820 0 我读到这是儒略日期格式 有人可以告诉我如何在 C 中将其解析回 Dat
  • 为什么我不能对普通变量进行多态?

    我是一名Java程序员 最近开始学习C 我对某事感到困惑 据我了解 在 C 中 要实现多态行为 您必须使用指针或引用 例如 考虑一个类Shape与实施的方法getArea 它有几个子类 每个子类都以不同的方式重写 getArea 然后考虑以
  • 如何在 Winform DataGridView 中创建不同的单元格格式

    我有一个 DataGridView 我将其绑定到 DataTable DataTable 是一个全数字值 要求 DataGridView 中的每 n 行都包含文本 而不是数值 以便在视觉上为用户分隔部分 我很高兴在绑定后将此文本数据放入 D
  • 清理堆分配对象的良好实践或约定?

    我正在学习C 我有 C C ObjC 背景 相当高级的语言 在 C 或 ObjC 上 作为函数或方法的结果返回堆分配的对象是很简单的 因为对象的清理是受管理的 按照惯例 会在适当的时候销毁 但我不知道在 C 中应该如何处理这个问题 例如 s
  • 从 STL 列表中删除项目

    我想创建一个函数 如果符合特定条件 则将项目从一个 STL 列表移动到另一个列表 这段代码不是这样做的方法 迭代器很可能会被擦除 函数失效并导致问题 for std list
  • 如何在用户空间程序中使用内核 libcrc32c (或相同的函数)?

    我想在我自己的用户空间程序中进行一些 CRC 检查 我发现内核加密库已经在系统中 并且支持 SSE4 2 我尝试直接 include

随机推荐

  • DLLNotFoundException - Unity3D 插件

    我在某些 Windows 机器上的独立构建中遇到 DLLNotFoundException 其他机器则运行良好 Dll 文件肯定在plugins 文件夹中 也将其复制到projectName Data 文件夹中 但没有区别 还尝试将 dll
  • Jersey 2.x 安全上下文不起作用?

    当我尝试创建 java jersey 应用程序时 身份验证角色对我不起作用 Java 代码 package org student resource import javax annotation security PermitAll im
  • 我们可以在运行时为 scala 类分配/更改特征吗?如何 - 有示例代码吗?喜欢策略模式(四帮设计模式)

    解释一下我的问题 类别 玩具 特质1 说话像男性 特质2 说话像女人 我可以在运行时更改玩具的行为 特征 以便有时同一个对象像男性一样说话 有时同一个对象像女性一样说话吗 我想改变运行时的说话行为 sealed trait Speaker
  • Visual Studio 2012 中自己的双选项卡模板

    因此 Visual Studio 中有一个技巧 当您键入 for 然后双击 Tab 键时 Visual Studio 将创建 for int i 0 i lt length i 有什么方法可以创建我自己的模板吗 因为我不使用 LINQ 所以
  • 使用Ajc编译器和Spring问题AspectJ

    当我尝试使用 ajc 编译器通过 spring 来执行spectj时 出现以下错误 当我删除aspectj时 代码工作正常 编译时编织是否有任何问题导致 caused by java lang ExceptionInInitializerE
  • 哪些指令不能在特定的CPU环中发出

    根据这个来源 级别3 5 特定CPU环不能做某些事情 例如环1 2 3代码不能设置GDT 因为操作系统内核会崩溃 虽然很明显Ring 0可以执行所有指令 我想知道哪些指令不能在环1 环2和环3中发出 我在维基百科或 osdev 以及类似的来
  • 如何将 Ng-if 与 Firebase 结合使用

    我知道 ng if 指令创建了一个新的子作用域 我想知道如何以及是否可以将 ng if 放入另一个作用域中 目前我看不到任何图标 我尝试过 ng hide 但我看到了两个图标 同时 不可能解决这个问题 我也尝试了 ng show 但结果与
  • GATT回调注册失败

    我正在尝试编写一个应用程序来通过蓝牙低功耗发送消息 然后该消息将通过我的外设中的 UART 传递 我已按照步骤操作here应用程序会成功扫描并找到设备 但是 使用 BluetoothGatt BluetoothDevice connectG
  • 如何编写一个 MySQL 查询,该查询返回一个临时列,其中包含与该行相关的项目是否存在于另一个表中的标志

    我如何编写 MySQL 查询才能获得如下所示的所需结果 我有两张桌子 TABLE USERS ID Name 1 Ash 2 Tim 3 Jim 4 Jay 5 Tom TABLE FLAGS ID Reason 2 4 我想知道如何编写一
  • 如何从asynctask返回一个对象到android中的主类

    我想将文档返回到我的主类 但即使使用全局变量也不起作用 这是因为 asynctask 没有完成工作我认为有没有解决方案可以从 asynctask 获取对象 我已经尝试过 onPostExecute 中的矫揉造作 但如果我在 asynctas
  • 如何在 Angular 2 中取消 HTTPRequest?

    如何在 Angular 2 中取消 HTTPRequest 我只知道如何拒绝请求承诺 return new Promise resolve reject gt this currentLoading set url resolve reje
  • C++ std::map 保存任何类型的值

    基本上我想要 MyClass 拥有一个将字段名称 字符串 映射到任何类型的哈希图 值 为此 我编写了一个单独的 MyField 类来保存类型和值信息 这是我到目前为止所拥有的 template
  • python虚拟环境中的标准库在哪里?

    我使用的是Ubuntu系统 默认安装了python 3 5 当我使用venv模块来创建虚拟环境 我在虚拟环境中找不到标准库 只能找到 python 解释器的二进制文件 但是 当我切换到使用此虚拟环境时 我可以在 python 脚本中导入标准
  • 使用“dplyr::group_by()”获取多个组的“chisq.test()$p.value”

    我正在尝试对几个组进行卡方检验在 dplyr 框架内 问题是 group by gt summarise 似乎没有做任何伎俩 模拟数据 与有问题的数据结构相同 但随机 因此 p values 应该很高 set seed 1 data fra
  • ios - appium 无法从下往上滑动

    我想在 ios 上设置 wifi 状态 为此 我需要从控制中心底部向上滑动 dimension driverWrapper getIosDriver manage window getSize int middleX dimension g
  • 获取 ASP.NET 开发服务器端口号

    我需要用C 方法获取asp net开发服务器端口号 你能帮助我吗 您可以从请求中获取它 Request Url Port 严格来说 这并不是开发 Web 服务器的端口 这是当前使用的 Web 服务器的端口
  • 在javafx中为图像添加计时器

    例如 我想首先在 javafx 中为我的图像添加计时器 大约 3 秒我的第一个图像显示 然后大约 5 秒我的第二个图像显示 之后什么也没有显示 对此有什么想法吗 Use a Timeline更新imageProperty of an Ima
  • 如何设置堆积条形图中背景所有部分的颜色

    以下是英格兰和苏格兰之间拉锯战当前状态的代码 public TugOfWar String s super s data set DefaultKeyedValues2DDataset dataset new DefaultKeyedVal
  • 在 TypeScript React 中导入图像 - “找不到模块”

    我正在尝试导入图像以在带有 TypeScript 的 React 组件中使用 我使用的打包器是 Parcel 不是 Webpack 我创建了一个 d ts文件内的图像文件扩展名 并将其包含在里面tsconfig json 然而 当我尝试导入
  • K&R 练习 1-20 编程语言第二版

    我应该在这个程序中做什么 我无法理解 问题是 编写一个程序 detab 用正确的数字替换输入中的制表符 空格到下一个制表位的空间 假设有一组固定的制表位 例如每 n 列 n 应该是变量还是符号参数 我首先将制表符 t 替换为空格 但我想这是