[英]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
這可能是由於緩沖區緩存的差異。
嘗試:
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.