截断用户在C中给出的文本字符串

时间:2013-09-22 21:44:53

标签: c

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

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

现在第二步要求我截断该行,也就是说,一旦它在一行中达到72个字符,就必须删除73rd等等(不转移到下一行),然后为用户创建一个新行输入更多数据。 (我相信空间算作一个角色空间)

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

但就目前而言,我只是想学习如何截断用户输入。我一步一步。我有一种感觉,我需要在while循环中使用某种if语句和计数技巧来帮助我截断它并创建一个新行,我只是想不出来。任何帮助?提示?谢谢。

2 个答案:

答案 0 :(得分: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;
}

答案 1 :(得分: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;
}

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