0

对于我的任务,我被要求从标准输入接收数据并通过标准输出将其打印出来。到目前为止,我已经正确完成了。(代码如下)

#include<stdio.h>
int main (void)
{
int a;
while ( ( a = getchar () ) != EOF)
   {
    putchar(a);
   }
return 0;
}

现在第二步要求我截断行,即一旦一行达到72个字符,则必须删除第73个等(不转移到下一行),然后换行供用户输入更多数据。(我相信空格算作字符空间)

另外,让我提一下,该程序假设接受用户输入,删除/替换所有非打印 ASCII 字符并删除所有非 ASCII 字符,然后在进行此类更改后,将行截断为 72 并打印结果。

但现在,我只想学习如何截断用户输入。我一步一步地工作。我有一种感觉,我需要某种 if 语句和 while 循环内的计数技巧来帮助我截断它并创建一个新行,我只是想不通。有什么帮助吗?提示?谢谢你。

4

2 回答 2

1
#include <stdio.h>
int main (int argc, char **argv)
{
  int a;
  int i = 0;
  while ( (a = getchar ()) != EOF) {
    if (++i < 73)
      putchar (a);
    else
      if (i == 73)
        putchar ('\n');
    if (a == '\n')
      i = 0;
  }
  return 0;
}
于 2013-09-22T22:04:07.343 回答
0

替代版本,我希望你能自己想出更多的东西。试着看看这是否符合我上面给出的描述。

#include <stdio.h>
int main(void)
{
    int in_char;                 /* holds the next input character from stdin */
    int col_no = 0;              /* column number, initially zero */
    while ((in_char = getchar()) != EOF) /* read a character into in_char */
    {                                      /* (ends loop when EOF received) */

        /* Here is where to insert a test for a non-ASCII character */

        col_no = col_no + 1;     /* add 1 to the column number */
        if (in_char == '\n')     /* ...but reset to 0 if a newline is seen */
            col_no = 0;
        if (col_no <= 72)        /* output the character if not beyond col. 72 */
            putchar(in_char);
    }
    return 0;
}

这是一般的想法,只是添加了一些过度注释来解释这些步骤。在没有注释的情况下输入此内容,并尝试将左侧理解为执行右侧描述的操作。

于 2013-09-23T00:36:09.010 回答