2016-07-02 81 views
1

我正在使用Microsoft Visual Studio Express 2013,出於某些奇怪的原因,我無法使用printf將字符打印到顯示屏上。我一直在運行測試代碼,它肯定不允許我打印字符。我有能力將整數打印到屏幕上。我從來沒有遇到過這樣的問題。這裏是我的代碼:我無法使用printf將字符打印到屏幕上

#include <stdio.h> 
#include <stdlib.h> 

int main() 
{ 
    char item; 

    printf("Test character # 1: "); 
    scanf_s("%c", &item); 
    printf("Test character entered = %c\n\n", item); 


    return (0); 

} 

輸出很簡單:

Test character entered = 

它只是顯示一個空白不管。

我試過使用fflush(stdout)並沒有關係。

有沒有人有任何建議,我可能會嘗試下一步?我想我會試着在我的Mac上運行它,以確保我沒有做錯某些事情。此外,我會嘗試讓printf使用%s打印出一個字符串,看看它是否可行。

任何建議非常感謝。謝謝!!

+0

更新:我曾嘗試打印字符串使用%s,它工作得很好。所以這個問題僅限於使用%c的printf中的字符。我想知道scanf_s()函數是否存在問題?這是我第一次使用這個函數,事實上,如果我嘗試使用scanf()並且它不會讓我編譯我的代碼,Microsoft聲稱這是一個錯誤。 – tadius

+2

'scanf_s'的'%c'和'%s'需要大小。例如'scanf_s(「%c」,&item,1);' – BLUEPIXY

回答

1

根據微軟文檔:https://msdn.microsoft.com/en-us/library/w40768et.aspxscanf_s(),需要對C的所有輸入參數的緩衝區大小,C,S,S。試着改變你的代碼:

#include <stdio.h> 
#include <stdlib.h> 

int main() 
{ 
    char item; 

    printf("Test character # 1: "); 
    scanf_s("%c", &item, 1); 
    printf("Test character entered = %c\n\n", item); 


    return (0); 

} 
+0

@BLUEPIXY文檔說:「與scanf和wscanf不同,scanf_s和wscanf_s要求爲所有類型爲c,C,s的輸入參數指定緩衝區大小, S或用[]括起來的字符串控制集。「感謝您指出了這一點。 – user3814613

+0

這解決了它!我現在不想對微軟感到沮喪,但是我對微軟宣稱scanf()是一個錯誤並聲明我必須使用scanf_s,但是它改變了scanf一直工作多年的方式感到失望。好的,足夠的抱怨:)對不起。 – tadius

+0

我也想補充一點,當你使用scanf_s而沒有聲明整數的緩衝區大小時,它工作得很好!它似乎只需要爲非整數項目聲明的緩衝區大小。 – tadius