亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

幫忙看看這個問題,關于C語言scanf函數輸入單個字符%c用%s代替?

幫忙看看這個問題,關于C語言scanf函數輸入單個字符%c用%s代替?

慕婉清6462132 2021-07-07 17:07:34
void main(){int i;int num[35],order[35];char flag;float a[35][6]={0};input(num,a);count(a);sort(a,order);printf("該程序可以篩選用戶指定課程成績在90分(含90分)以上,并且總分為前五名的學生情況,是否需要查詢?(y/n)");scanf("%s",&flag);if(flag=='y')serch(num,a,order);getchar();getchar();getchar();}這是我的主函數,另外的子函數沒考過來,問題在于scanf那句,如果我用%c,運行有邏輯問題,你輸入y后,好像程序根本就沒有輸入數據,我把%c換成%s就可以了,絕對無誤。以前也遇到好多這種情況,這樣換屢試不爽,可是我不清楚到底怎么回事。還有如果我把前面的子函數都刪掉,上了就scanf,用%c是可以的,不知道這是怎么回事。高手給指點一二
查看完整描述

2 回答

?
慕標琳琳

TA貢獻1830條經驗 獲得超9個贊

scanf("%c", &flag);
輸入 : y 再回車沒反應?
可能是在前面的
input(num,a);
count(a);
sort(a,order);
中存在有緩沖,因為%c不會跳過空格等空字符,而%s是會跳過的,這也許是唯一的差別。

解決辦法:
在scanf("%c", &flag);前清空緩存
fflush(stdin);
然則也不清楚是不是這個原因,
你完全可以打印一下flag的碼值來調試一下嘛。
你可以試一下,多年未動C的飄過。



查看完整回答
反對 回復 2021-07-11
?
米脂

TA貢獻1836條經驗 獲得超3個贊

原因是在input函數里面有接受用戶輸入的動作,而輸入一定是以回車結束,那么這個回車就會殘留在緩存中,而當你的scanf讀取flag的時候,程序會自動獲取前面的那個回車符號,這就是用%c會自動跳過的原因,而用%s的話,程序就會等待下一行輸入,回車符號并不會被接收,建議在scanf("%c", &flag);修改為:
fflush(stdin); //清空緩存
scanf("%c", &flag);

查看完整回答
反對 回復 2021-07-11
  • 2 回答
  • 0 關注
  • 636 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號