我試圖在我的程式中為我的帶空格的字串獲取用戶輸入,但由于某些原因,%[^ ] 不起作用。"%"部分被標記為紅色。我不明白為什么。它只是跳過,沒有要求用戶輸入。另外,這是我在這個網站上的第一個問題。感謝能夠回答我問題的人。
int prelim, midterm, semiFinal, final, totalScore, yearLevel, studentId;
float averageScore = 0;
char name[25], degree[25] 。
printf("enter your student id: ")。
scanf("%d", &studentId);
printf("Name: ")。
scanf("%[^
]s", &name)。)
printf("Degree: ");
scanf("%[^
]s", &度)。)
printf("Year: ");
scanf("%d", &yearLevel)。
uj5u.com熱心網友回復:
首先,scanf("%[^
]s", &name)必須是scanf("%[^
]", name)為
s不是%[格式指定器的一部分,因為初學C語言的人常常這樣認為。- 安培號應該被洗掉,因為陣列的名稱會衰減為指向其第一個元素的指標,而這個元素已經是
%[>所期望的型別。
現在,為了回答你的問題,%[^
]將失敗,如果它看到的第一個字符是一個。
。對于scanf的studentId,你輸入數字并按Enter。這個scanf消耗了這個數字,但是留下了回車符()。
)在輸入流中。然后,針對name的scanf看到了換行符,由于這是它看到的第一個字符,它沒有接觸到name就失敗了。下一個scanf由于同樣的原因而失敗,最后一個scanf等待一個數字。
但是等等! 為什么最后一個scanf也沒有失敗呢?答案是某些格式指定器,如%d跳過了前面的空白字符。而%[格式指定器則不會。
現在我們該如何解決這個問題?一個簡單的解決方案是告訴scanf跳過%[格式指定器前的空白字符。你可以通過在它前面添加一個空格來做到這一點。scanf(" %[^
]", name)。當scanf看到空格時,它將跳過輸入流中的所有空白字符,直到第一個非空白字符。這應該可以解決你的問題。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/306938.html
標籤:
上一篇:如何從陣列中洗掉元素
