為什么我的scanf函式在while中只運行一次?
#include<stdio.h>
#include<stdlib.h>/span>
int main()
{
char s[9999] 。
while(scanf("%[^
]s",s)>0)
{
int count=0, prev=0;
for (int i=0;i<strlen(s);i )
{
if(s[i]==' '/span>)
{
count=i-prev;
prev=i 1。
printf("%c", (char) (96 count)。
}
else if(strlen(s)-1==i)
{
count=i-prev 1; printf("%c", (char) (96 count)); } }
}
printf(" "/span>)。
}}
我的測驗案例和輸出:
輸入被認為是一個字串,最大長度為1000
uj5u.com熱心網友回復:如果你不了解scanf,你就不應該使用它。 當你理解了scanf,你就不會使用它。
while(scanf("%[^
]s",s)>0)
scanf將讀取輸入流,將字符寫入變數s,直到它看到一個換行。 然后,它將嘗試匹配輸入流中的一個字面s。 顯然,下一個字符不是s(它是一個換行),所以格式字串中的s并不匹配。 (這不是一個真正的問題,但你要求scanf匹配一個字面的s,而s肯定不在那里,這無疑是很奇怪的。 如果你試圖用"%[^
]s%d",你可能會感到困惑,為什么scanf從不匹配一個整數。 這是因為scanf在輸入流與格式字串不匹配時就會停止掃描,格式字串中的s也不會匹配)。 在回圈的第二次迭代中,scanf看到的第一個字符是換行,所以它沒有進行轉換,并回傳0。
]"作為一個轉換指定器。 如果你不想丟棄前導空白,你可以用" %[ ]"/code>丟棄換行。
]%*c" 注意,你真的應該防止覆寫s,所以你應該使用:
while(scanf("
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/322465.html
標籤:

