【发布时间】:2015-03-26 16:55:53
【问题描述】:
所以我正在做 Ritchie/Kernighan 编写的 C Programming Language 2nd Edition 中的练习。特别练习1.9。 “编写一个程序将其输入复制到输出,用一个空格替换每个字符串。”
我相信我的解决方案是正确的,但是每次我点击进入屏幕时都会输出我的行而不是等待 EOF。这是预期的行为吗?我只是使用他在书中介绍的功能和关键字。
如果我有多个换行符,我如何强制它等到我输入 eof 才能得到输出? Putchar 一次只处理一个字符,所以也许不可能。
还有什么是退格?他是指空格键只是一个空格吗?
/*
Copys its input to its output, replacing each string with multiple blanks with one.
Input - "I am running."
Output - "I am running."
*/
#include "stdafx.h"
int _tmain(int argc, _TCHAR* argv[])
{
for (int c = getchar(); c != EOF; ){
while (c == ' '){
c = getchar();
if (c != ' '){
putchar(' ');
}
}
putchar(c);
c = getchar();
}
return 0;
}
改进版:
int _tmain(int argc, _TCHAR* argv[])
{
int c;
while ((c = getchar()) != EOF){
while (c == ' '){
c = getchar();
if (c == EOF){
break;
}
if (c != ' '){
putchar(' ');
}
}
putchar(c);
}
return 0;
}
【问题讨论】:
-
你的逻辑有点乱,我并不是说这是一种侮辱。当您学习时,很容易陷入
whiles、fors 和if语句中。也许考虑一下如何重新组织循环,获取字符并检查它直到到达EOF。 -
我认为你的改进版更好。它更具可读性并且使用更少的代码。
-
你对退格有什么问题,我在问题描述中没有看到,我目前没有 K&R 的副本。
-
练习 1-10 状态编写一个程序将输入复制到输出,用 \t 替换每个制表符,用 \b 替换每个退格键,用 \\ 替换每个反斜杠。
-
退格是字符
char c = '\b'。由于您的输入正在由控制台进行行缓冲,因此您可能不会在输入中看到任何退格字符,因此我不确定他们想在这里做什么。
标签: c