问题标签 [kernighan-and-ritchie]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c - K & R 练习:我的代码有效,但感觉很臭;清理建议?
我正在写 K&R 的书。我比我做的练习读得更远,主要是因为没有时间。我正在赶上进度,并且已经完成了第 1 章(即教程)中的几乎所有练习。
我的问题是练习 1-18。练习是为了:
编写一个程序从输入行中删除尾随空格和制表符,并删除完全空白行
我的代码(如下)可以做到这一点,并且可以工作。我的问题是我实现的修剪方法。感觉……错了……不知何故。就像我在代码审查中看到 C# 中的类似代码一样,我可能会发疯。(C# 是我的专长之一。)
任何人都可以提供一些关于清理这个问题的建议 - 说建议只能使用 K&R 第 1 章中的知识。(我知道有无数种方法可以使用完整的 C 库来清理这个问题;我们'这里只是谈论第 1 章和基本的 stdio.h。)另外,在给出建议时,你能解释一下为什么它会有所帮助吗?(毕竟,我是在努力学习!还有谁比这里的专家更适合学习呢?)
编辑:我感谢我在这里看到的所有有用的提示。我想提醒人们,我仍然是 C 的 n00b,特别是还没有得到指针。(记住关于 K&R 的 Ch.1 的一点——Ch.1 不做指针。)我“有点”得到了一些解决方案,但对于我所处的位置,它们仍然有点先进......
我正在寻找的大部分内容是修剪方法本身——特别是我循环了3次的事实(感觉很脏)。我觉得如果我稍微聪明一点(即使没有 C 的高级知识),这本可以更干净。
c - 我应该如何学习C?
我对学习 C 很感兴趣。我读过K & R,甚至在 R 和 Python 中做了一些简单的 C 扩展工作。用 C 做一些更实质性的事情是什么有价值的项目想法?有什么好的在线资源,类似于Dive Into Python吗?特别是,资源集中在那些已经知道正在尝试学习 C 的新语言的程序员上(其中提到了诸如“在 C 中询问数组的长度是无稽之谈,你这个懒惰的 Pythonista”)。
我的背景:
数学/统计,Python、R 的日常编程,主要围绕自然语言处理、算法等。
c - ## 预处理器运算符的应用和要考虑的问题是什么?
正如我之前的许多问题中提到的,我正在通过 K&R 工作,目前正在进入预处理器。更有趣的事情之一——我以前尝试学习 C 时从未知道的事情——是##
预处理器操作符。根据 K&R:
预处理器运算符
##
提供了一种在宏扩展期间连接实际参数的方法。如果替换文本中的参数与 a 相邻##
,则将参数替换为实际参数,##
并删除周围的空白,并重新扫描结果。例如,宏paste
连接它的两个参数:
#define paste(front, back) front ## back
所以
paste(name, 1)
创建了令牌name1
。
有人如何以及为什么会在现实世界中使用它?有哪些实际使用示例,是否有需要考虑的问题?
c - 自定义获取行输入功能
我正在阅读 K&R 的书,有点卡住了。
以下有什么问题?
当我运行程序时,它永远不会退出循环,我必须Ctrl+C退出。但是,如果我用 替换第五行printf("%c", c);
,它会在按 Enter 并创建新行后打印出所有输入。
c - 什么是 C 中寄存器变量使用的好例子?
我正在阅读 K&R 并来到关于寄存器变量的小部分,并且想知道这里的人们是否有一些很好的实践示例。
从 K&R 的第 4.7 节:
寄存器声明看起来像
register int x;
注册字符 c;
需要明确的是,我只是希望看到一些很酷的代码示例。我(很确定我)理解主题,所以不需要输入详细的解释(除非你愿意)。
c - K&R 书中的 C 编程练习
知道为什么以下代码不打印输入中的字符数吗?我直接从 K&R 书中得到了这个。目前正在学习 C,这真的很令人困惑,在我看来,我永远不会达到 EOF。如果是这样,那为什么要用这个作为例子呢?
c - 如何完成 K&R 练习 2-4?
我正在学习如何使用 k&r 书(C 编程语言)用 C 语言编写程序,但其中一个练习有问题。它要求我检测并删除字符串 s1 中的一个字符,该字符与字符串 s2 中的任何字符匹配。
所以,说 s1 = "A";
和 s2 = "AABAACAADAAE"
我希望它返回“BCDE”
我知道我走在正确的道路上,我只是不知道如何很好地设计程序,你能否给我任何额外的提示。我试图阅读二叉搜索树算法,但觉得它对于这个平凡的任务来说有点太高级了。
感谢大家!
c - ungetc(或来自 K&R 的 ungetch)的目的是什么?
谁能向我解释 ungetch 的目的?这来自 K&R 第 4 章,您在其中创建了一个逆波兰计算器。
我已经在没有调用 ungetch 的情况下运行了该程序,并且在我的测试中它仍然可以正常工作。
(我已经删除了 getch 中的三元运算符以使其更清晰。)
c - K&R练习:多维数组转指针数组
day_of_year
练习(5-9):用指针而不是索引重写例程。
我可能只是累了,没有思考,但实际上如何创建一个带有指针的多维数组?
我可能会弄清楚该函数的其余部分,但我无法正确使用语法。
c - K&R C 示例中的指针类型不匹配警告
可能重复:
编译 K&R 示例时出现问题
最近我一直在研究 K&R 的 C 编程语言。
在第 5.11 节中,他们介绍了指向函数的指针,并且在输入他们的示例之后——一个快速排序实现,我们提供了一个指向我们想要使用的比较函数的指针——我从编译器那里得到一个警告:条件表达式中的指针类型不匹配. (我的编译器是 OS X 10.5.6 上的 gcc 4.0.1)
示例中触发警告的行是:
该程序在没有段错误的情况下执行,但我喜欢尽可能消除所有警告,或者至少了解它们的原因。
numcmp 的函数声明如下所示:
但是根据手册页, stcmp 有这个签名:
由于方法签名略有不同,警告是否简单?忽视警告的后果是什么?