对于下面的question https://users.cs.cf.ac.uk/Dave.Marshall/C/node7.html#SECTION00730000000000000000,
练习 12336 - 从程序的标准输入中一次读取一个字符的普通文本,并以每行从左到右反转的方式打印它。阅读直到遇到数据结束`
您可能希望通过键入`来测试该程序
prog5rev | prog5rev
查看是否重新创建了原始输入的精确副本。要将字符读取到数据末尾,请使用循环,例如`
char ch;
while( ch = getchar(), ch >= 0 ) /* ch < 0 indicates end-of-data */
or
char ch;
while( scanf( "%c", &ch ) == 1 ) /* one character read */
这是我的解决方案:
#include <stdio.h>
void f(char *);
int main(void)
{
char ch = getchar();
f(&ch);
return 0;
}
void f(char *ch){
if(*ch < 0)
return;
else{
char character = getchar();
f(&character);
}
putchar(*ch);
}
Input:
abc | abc
Output:
cba | cba
问题:
问题说:print it with each line reversed from left to right.
这个解决方案正确吗?
这是一个如此聪明的解决方案,我真的不想破坏它,但使用堆栈有一些限制。准确地说是内存限制。如果您的输入量超过一定的、相对较小的量,它将达到限制并以某种方式崩溃,例如:分段错误。古腾堡莎士比亚全集的所有 5,560,737 个字符均未通过,它在字符 654,337 处出现段错误。
抱歉,您需要使用堆来进行更大的输入。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)