簡體   English   中英

在Unix和Windows中運行程序

[英]running a program in Unix vs in Windows

我正在編譯一個用C編寫的簡單程序,我在Eclipse 7和MacBook Pro上都使用Eclipse作為IDE。 我的朋友寫的非常簡單的程序,並讓我幫助他:

int a = 0;
char b[2];
printf("Input first class info:\n");
printf("Credit Hours: \n");
scanf("%d", &a);
printf("Letter Grade: ");
scanf("%s", b);

因此,當我在我的Mac上運行它時,每行打印,當我遇到scanf()時,我可以按預期輸入和繼續。 在Windows中,我必須輸入所有內容然后它將打印所有行。 我不確定為什么會發生這種情況......這與Windows和Mac有什么區別?

蘋果電腦:

Input first class info:
Credit Hours: 4
Letter Grade: B+

視窗:

4
B+
Input first class info:
Credit Hours:
Letter Grade:

謝謝,Hristo

正如Windows上的這個帖子所提到的那樣:

在調用printf()之后,你需要fflush(stdout) printf()

此外,由於錯誤27663 ,在Eclipse控制台上執行printf()不會刷新,直到printf()的緩沖區變滿。
這有各種相關的Windows控制台錯誤錯誤102043錯誤121454

這可能是由於緩沖區緩存的差異。

嘗試:

fflush(stdout);

在您的scanfs之前。 當您需要查看時,這將強制將輸出刷新到屏幕。

Windows和Mac以不同方式緩沖控制台輸出。 如果您希望它立即顯示,您需要通過調用來刷新它

fflush(stdout);

在printf之后。

我的猜測是,在Mac OS X上,“\\ n”會導致stdout被刷新,而在Windows上卻不是這樣。 嘗試在print語句之后和scanf語句之前添加以下代碼:

fflush(stdout);

就像費奧多爾所說,這很可能是一個終結問題。

在Windows上,行結尾是“\\ r \\ n”(回車后跟換行)。

在Mac OSX上,行結尾只是“\\ r”,但“\\ r \\ n”也有效,因為它包含“\\ r”。

在Unix / Linux上,行結尾通常只是“\\ n”。

除了有關fflush()需求的答案之外 - 您的代碼包含緩沖區溢出。 scanf()到b寫3個字節 - { 'B', '+', '\\0' } - 你的數組沒有足夠的空間來存儲NUL終結符。 您需要一個3個字符寬的緩沖區,或者使用除scanf(%s)以外的其他內容來讀取2個字符。

您想使用\\r\\n而不是\\n

暫無
暫無

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

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