【发布时间】:2019-08-04 05:03:36
【问题描述】:
我正在尝试编写一个程序(用 C 语言),其中输入被反转并逐行反向打印。在大多数情况下,代码实际上就是这样做的。问题在于,对于我的某些(大部分)输入,我会在控制台中的输入和输出之间得到一个随机字符或一个额外的换行符。
例如,我启动程序,在控制台中输入“testing”,然后按回车键返回“gnitseT”。这已经成功地发生了,这是我所期望的。它看起来像这样:
测试
gnitseT
但是当我在控制台中输入“Hello”时,它看起来像这样:
你好
g(意外)
呵呵
或者,如果我在控制台中输入“running”,而不是在输入和输出行之间出现意外的“g”,我会得到一个额外的换行符。
跑步
这里换行
这里有额外的换行符(意外)
gninnuR
#include <stdio.h>
void reverse(int length, char s[])
{
int i;
for (i = length; i >= 0; i--)
{
printf("%c", s[i]);
}
printf("\n");
}
int main(void)
{
char smain[2000];
int c;
int i;
i = 0;
while ((c = getchar()) != EOF)
{
smain[i] = c;
i++;
if (c == '\n')
{
reverse(i, smain);
i = 0;
}
}
return 0;
}
预期的行为是程序在按下回车键后将反向输入输出到控制台。
有时,尤其是在程序开始时,它会完美运行。
然后,它开始在我的输入和输出之间给我一个随机字符,或者它开始给我一个额外的换行符。
我希望它只以相反的顺序打印输入,而不会在输入和输出之间出现任何意外的奇数字符。
感谢您的帮助。
【问题讨论】:
-
为什么
c是int而不是char? -
这样就可以处理EOF了。我把它改成了char,问题依旧。
-
我认为您的
for循环的开始和结束位置存在问题。 -
另一个不错的
OB1示例。 -
这确实是一个问题