簡體   English   中英

為什么以下代碼在 C 和 Python 中給出不同的輸出?

[英]why does following code give different output in C , Python?

我想在Unix中實現$cat的輸入獲取過程。 在無限循環中,每當我按任意鍵時,屏幕上都會打印相應的字母。 如果我按 ctrl+d,循環將被終止。

這個 TurboC 代碼正是我想要的:

#include<stdio.h>
#include<conio.h>
void main()
{
 char ch;
 while(1)
 {
  ch=getch();
  if(ch==4)
   break;
  else
   printf("%c",ch);
 }
}

但是每當我切換到 Python3 時,就會出現問題。

from msvcrt import getch
while True:
    ch=getch()
    if ord(ch)==4:break
    else: print(ch.decode(), end="")

當程序處於無限循環時,它不會打印任何內容,但我正在按鍵。 最后,當我按 ctrl+d 時,所有以前輸入的字符都會一起打印。

我如何在 Python 中實現它?

問題是 Python 中的輸出被緩沖,除非你按照@AlbinPaul 的建議使用sys.stdout.flush()print(ch.decode(), end="", flush=True)它。 如果您使用std::cout而不是printf您可能會面臨與 C++ 相同的問題。 這背后的想法是每個輸入/輸出操作都非常昂貴,因此如果您立即將每個字符一個一個地輸出到輸出設備中,您會發現性能下降。 將輸出保存在內存中並不時刷新這些累積的輸出要便宜得多,因此大多數高級語言選擇緩沖輸出。

如果您需要實時交互(例如您的情況),有時這種緩沖會帶來問題。 另一個可能臭名昭著的問題是競爭性編程:不要忘記刷新你的輸出,否則你會達到時間限制。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM