对于我的任务,我被要求从标准输入接收数据并通过标准输出将其打印出来。到目前为止,我已正确完成。 (以下代码)
#include<stdio.h>
int main (void)
{
int a;
while ( ( a = getchar () ) != EOF)
{
putchar(a);
}
return 0;
}
现在第二步要求我截断该行,也就是说,一旦它在一行中达到72个字符,就必须删除73rd等等(不转移到下一行),然后为用户创建一个新行输入更多数据。 (我相信空间算作一个角色空间)
另外,我要提一下,这个程序假设用户输入,删除/替换所有非打印ASCII字符并删除所有非ASCII字符,然后在进行这些更改后,我们将这些行截断为72并打印结果。
但就目前而言,我只是想学习如何截断用户输入。我一步一步。我有一种感觉,我需要在while循环中使用某种if语句和计数技巧来帮助我截断它并创建一个新行,我只是想不出来。任何帮助?提示?谢谢。
答案 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;
}
这是一般性的想法,只是添加了一些过度注释来解释步骤。在没有评论的情况下输入此内容,并尝试将左侧理解为执行右侧描述的内容。