示例代码是(注释是我想象的第一个循环):
#include <stdio.h>
#define BACKSPACE 8
main()
{
int c;
while((c = getchar()) != EOF) //output: GODDAMN NOTHING cursor on: 'h'
{
//if the input is "house" before entering EOF
putchar(c); //output: 'h' cursor on: 'o'
getchar(); //output: 'h' cursor on: 'u'
printf("%c", BACKSPACE); //output: 'h' cursor on: 'o'
getchar(); //output: 'h' cursor on: 'u'
printf("%c", BACKSPACE); //output: 'h' cursor on: 'o'
getchar(); //output: 'h' cursor on: 'u'
printf("%c", BACKSPACE); //output: 'h' cursor on: 'o'
}
} //ACTUAL END OUTPUT: "h"
我知道大多数程序中的常规退格看起来像: printf(&#34;%c%c&#34;,8,8); ..意味着退格几乎只是将光标向后移动而不删除任何东西,就像getchar()只是向前移动光标一样。
我试图理解为什么上面的示例代码输出与以下内容完全相同:
#include <stdio.h>
main()
{
int c;
while((c = getchar()) != EOF) //output: WE HAVE NOTHING cursor on: 'h'
{
//if the input is "house" before entering EOF
putchar(c); //output: 'h' cursor on: 'o'
}
} //ACTUAL END OUTPUT: "house"
编辑:跟进问题!我如何反转&#34;一个getchar()调用?
#include <stdio.h>
main()
{
int c;
char a;
while((c = getchar()) != EOF)
{
a = c;
putchar(c);
a = getchar();
??????????
}
}
我需要做什么&#34; ??????????## 34;,这样当我再次调用getchar分配给c时,它会在前面的赋值之后得到char c,而不是a之后的字符。
答案 0 :(得分:2)
您的程序实际上并不是一次从终端读取一个字符。而是从缓冲区读取,该缓冲区保存您输入的整行。
所以:
public function upload_photo() {
$file = Input::file('camera_input');
var_dump($file);
}
后,您的计划
h
,h
,o
)h
,然后
u
,然后
有些终端会将光标换回上一行的末尾,有些会停在边缘。
答案 1 :(得分:2)
您的输出实际上并未转到输入来源的相同位置。
终端收集你的击键。在您键入时,它会显示它们并记住它们。当您按下ENTER键时,它会将记住的击键发送给您的程序。
同时,它显示程序的输出。您可以让终端擦除您键入的字符的显示,但这不会改变您键入的字符的内存,也不会更改发送到您的程序的字符。
撤消单 getchar(),你可以使用ungetc: