程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C >> C語言問答 >> 看下C語言程序那裡錯了?

看下C語言程序那裡錯了?

編輯:C語言問答

看下C語言程序那裡錯了?

5 補充:

#include "stdio.h"
void main()
{
 void fun();
 char m;
 int i;
 char date[7][10]={"monday","tuesday","wednesday","thursday","friday","saturday","sunday"};
  for(i=0;i<7;i++)
   printf("%s  ",date[i]);
  scanf("%c",&m);
   switch(m)
   {
   case 'm': printf("星期一");break;
   case 'w': printf("星期三");break;
   case 'f': printf("星期五");break;
   case 't': fun();break;
   }
}
void fun()
{
 printf("請輸入第二個字母:\n");
 char v;
 scanf("%c",&v);
 switch(v)
 {
 case'u':printf("星期二\n");break;
 case'h':printf("星期四\n");break;
 default:printf("error\n");
 }
}
 

 

 

最佳回答:

就是一個數據流的問題。
當你第一次輸入t    然後再按回車鍵時,    就進去做void fun()的scanf("%c",&v);


下面注意了:
雖然空格、制表符和換行符都用做域分割符號,但讀單字符操作中卻按一般字符處理。例如,對輸入流 "x y" (xy間有空格)調用:  scanf( "%c%c%c", &a, &b, &c );  返回後,x 在變量 a 中,空格在變量 b 中y 在變量 c 中。


所以在你輸入t  按回車鍵後,t被送入m,而換行符('\r')仍然在鍵盤緩沖區被void fun()的scanf("%c",&v);送進了v中去了,就類似於scanf( "%c%c", &m, &v )這種情況。


知道這些後你就好改了,可以在scanf("%c",&v);前加getchar(),或則在scanf("%c",&v);的%c前加空格,將‘\r’抵消掉,就能成功輸入進v了。也可以用函數 fflush來清除一個流
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved