是否可以打印用户输入的输入而不使用char数组?
当涉及Enter字符时,此代码不起作用:
#include<stdio.h>
main()
{
int ch;
while((ch = getchar()) != EOF){
putchar(ch);
}
}
例如,我想输入:
abcd
efgh
ij
我希望输出相同:
abcd
efgh
ij
但是当我进入第一行时,程序也应该输出该行(在我输入之后)。它是这样的:
abcd (my input)
abcd (output)
efgh (my input)
efgh (output)
ij (my input)
ij (output)
答案 0 :(得分:1)
#include<stdio.h>
int main(){
FILE *fp = fopen("echo.tmp", "w+");
int ch;
while((ch = getchar()) != EOF){
fputc(ch, fp);
}
fflush(fp);
rewind(fp);
while((ch = fgetc(fp)) != EOF){
putchar(ch);
}
fclose(fp);
remove("echo.tmp");
return 0;
}
答案 1 :(得分:1)
为了好玩,这是一种不切实际的递归解决方案。
阅读char
后,将其放入堆栈并递归。
完成后(EOF),通过堆叠递归。
#include <stdio.h>
typedef struct prev_T {
struct prev_T *prev;
int ch;
} prev_T;
void put1(prev_T *s) {
if (s != NULL) {
// Swap this line and the next if you want to print in reverse.
put1(s->prev);
putc(s->ch, stdout);
}
}
void get1(prev_T *s) {
prev_T node;
node.ch = getchar();
if (node.ch == EOF) {
put1(s);
} else {
node.prev = s;
get1(&node);
}
}
int main(void) {
get1(NULL);
return 0;
}
答案 2 :(得分:0)
一个更不切实际的递归解决方案:
#include <stdio.h>
#include <stdarg.h>
void unwind(va_list ap)
{
int ch = va_arg(ap, int);
if ( ch == EOF )
return;
va_list a2 = va_arg(ap, va_list);
va_end(ap);
unwind(a2);
putchar(ch);
}
void package(int dummy, ... )
{
va_list ap;
va_start(ap, dummy);
int ch = getchar();
if ( ch == EOF )
unwind(ap);
else
package(0, ch, ap);
}
int main()
{
package(0, EOF);
}
答案 3 :(得分:0)
从您提供的输入中完成预期输出的简单,非递归,非常实用的方法是读取单个字符并立即输出,并对特殊字符进行特殊处理。例如,您可以测试字符值13以在按下回车键时输出换行符,并查找其他特殊字符以表示输入结束。