[英]C++: Flawed console output on using a conditional statement
我是C ++(以及一般編程)的新手。 我編寫了一個程序,該程序讀取和寫入員工聯系方式。 這段代碼運作良好:
// appropriate headers...
int main()
{
char trigger{};
int options = 0;
bool testing{};
fileIps Inptbox; // for entering new data
char ext_title[20]; char ext_intercomNum[4]; char ext_dept[20];
printf("%s", "Enter Officer's Title:\n");
gets_s(ext_title, 20);
printf("%s", "Enter Officer's Intercom Number:\n");
gets_s(ext_intercomNum, 4);
printf("%s", "Enter Officer's Department:\n");
gets_s(ext_dept, 20);
Inptbox.rcv_values(ext_title, ext_intercomNum, ext_dept);
Inptbox.create_string();
testing = Inptbox.validate();
if (testing == true)
return -1;
else if (testing == false)
Inptbox.write_string();
// more code below...
我的問題是關於控制台輸出。 我試圖引入條件語句以啟用選擇讀或寫模式。 上面的代碼用於寫入文件。 下面還有更多行代碼可以讀取文件,它們也可以正常工作。
我的挑戰是,一旦我為上述代碼引入了條件語句...
printf("%s", "Enter 1 to WRITE DATA or 2 to READ DATA\n");
cin >> options;
if (options == 1)
{
fileIps Inptbox; // for entering new data
//... rest of code...
}
// more code below...
...控制台上的輸出有缺陷,因為顯示了第一個輸入的提示,但被完全跳過了,迫使用戶首先輸入“ 官員的對講機號碼 ”。 第三個提示效果很好。
詳細說明,當我使用cin
將值1分配給options
(即應用條件)時,控制台將立即打印...
Enter Officer's Title:
Enter Officer's Intercom Number:
...使我無法填寫第一個條目(即“ 標題 ”)。
我為此苦苦掙扎,並嘗試了幾項修復方法。 我使用了fgets()
,甚至嘗試使用gets()
。 我重新上課,但沒有任何效果。 我廣泛閱讀了諸如緩沖之類的內容,在此站點上研究了問題,並瀏覽了cstdio
上的各種資源以及ios_base
及其派生類(這很好,因為我學到了很多其他東西)。 但是,除非我從代碼中刪除了“ if”語句,否則我嘗試的其他任何方法都不會起作用。
因此,我的問題是:“如何解釋這種行為?如何最好地實現我的代碼以使我能夠在讀寫模式之間切換?”
我正在使用MS Visual Studio 2015 。
使用格式化的提取運算符'>>'存在問題。 在這種情況下,它將讀取所有可以轉換為整數的值。 但是,您必須輸入Enter表示您已准備好。 >>運算符不處理該換行符。 下次讀取輸入時,它將看到先前給定的換行符。 因此,“輸入官員的頭銜”輸入立即設置為換行符並繼續。 嘗試使用類似:
std::string line;
getline(cin, line);
並測試字符串或將其轉換。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.