3 回答

TA貢獻1765條經驗 獲得超5個贊
scanf("%[^\n]%*c",str)
表示讀入一行字符串。
^表示"非",[^\n]表示讀入換行字符就結束讀入。
*表示該輸入項讀入后不賦予任何變量,即scanf("%*[^\n]%*c")表示跳過一行字符串。
^可以看作是運算符

TA貢獻1829條經驗 獲得超6個贊
scanf("%*c%*[^\n]");這條語句中%*c表示, 讀入一個字符,但是這個字符不保存到變量里,所以后面不需要有對應的char型的參數。%*[^\n]表示讀入一個字符串,字符串里的字符只能是由[]里指定的字符,并且這個字符串也不保存。假如是%*[abcd], 只能輸入abcd所組成的字符串,如aabbddcc,如果遇到其他字符,scanf函數就會返回。這里是%*[^\n], ^表示“非”的意思, \n是換行, %*[^\n]表示讀入所有不是換行的字符。所以 scanf("%*c%*[^\n]");表示,讀入一個字符,再讀入一串不是換行的字符,這些都不保存,然后返回。其實就是,跳過一行的意思。你這個程序的輸入,可能是這樣的:21 2 abcd3 4 xxxxxxxxxscanf("%d",&k);讀入了k,使k成了2,scanf("%d\n%d",&n,&win);讀入了n和win,它們分別是1,2,這時候,后面的abcd用不著了,使用scanf("%*c%*[^\n]");跳過去。然后繼續讀入scanf("%d\n%d",&n,&win),使n=3,win=4,這時,再使用scanf("%*c%*[^\n]");跳過后面的xxxxxxxxx

TA貢獻1893條經驗 獲得超10個贊
int k,i,n,win;意思是定義整形變量scanf("%d",$k);接收屏幕輸入的數字,并保存到k變量中for(i=1;i<=k;i++)循環從i=1開始,直到i<=k的值為止,每次I自增1scanf("%d\n%d",&n,&win)從屏幕中接受兩個數據并保存到變量n和win中。scanf(“%*C%*[^\n]”)從屏幕中接受字符串if(win==0) printf("wind\n")如果win的值為0則輸出字符串wind否則輸出字符串lolanv
添加回答
舉報