程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C >> C語言問答 >> c語言菜鳥請教一個問題。

c語言菜鳥請教一個問題。

編輯:C語言問答

c語言菜鳥請教一個問題。

25

先上代碼:

#include<stdio.h>
void main()
{
 //定義五個變量,語文、英語、數學,總分,平均分
 float chinese,english,maths,total,average;


 printf("請輸入語文成績\n");

 a:
 scanf("%f",&chinese);
 if(chinese<0 || chinese>100)
 {
  printf("輸入不合法,請重新輸入\n");
  goto a;
 }
 else


 printf("請輸入英語成績:\n");
b:
 scanf("%f",&english);
 if(english<0 || english>100)
 {
  printf("輸入不合法,請重新輸入\n");
   goto b;

 }
 else


 printf("請輸入數學成績\n");
c:
 scanf("%f",&maths);
 if(maths<0 ||maths>100)
 {
  printf("輸入不合法,請重新輸入\n");
  goto c;
 }
 else

  total=chinese+english+maths;
  average=total/3;
  printf("學生的總分為%.2f,平均分為%.2f",total,average);

}

我運行這個程序的時候,如果按正常套路來,是沒問題的,但是我在輸入成績時,輸入帶有符號的內容,比如輸入括號裡面的內容時(2-1), (21、1),就會出錯,請教高手指點一下,這程序應該怎麼改啊?

最佳回答:

沒有清空輸入緩沖區!
在每次scanf後面加上如下兩句:

scanf("%*[\n]");
scanf("%*c");
追問:
scanf("%f",&maths);
 scanf("%*[\n]");
 scanf("%*c");這樣嗎?我試了,運行的時候還是不行啊?
回答:

寫錯了,不好意思

scanf("%*[^\n]");少了一個符號

追問:

你看下,還是能輸入符號啊,還能改進嗎,我再給你加分。

回答:
你是說這個呀。。。這個我沒辦法解決。。。因為每次讀數據他都是從你輸入的數據中的第一個字符開始讀,如果是%d,他就讀一個整數,只要你第一個輸入的是整數,那麼他就會讀取,比如你輸入2%%%,他先讀第一個2如果是整數,他就繼續讀%,2%顯然不是整數,所以他會判斷一下來選擇讀取,雖然你輸入的整個數據不是整數,但是他還是讀了2進去,如果你在讀取的時候%2d,那麼他就必須讀完2個數才會繼續
追問:
恩,那個不解決了,我問下,你這兩句代碼什麼意思啊?
回答:

清空輸入緩沖區的數據!比如你有時候輸入數據時,多輸入了一些不相關字符,這些多余的數據就會保留在輸入緩沖區中,但是你並不想用它,所以就要清除掉。

scanf("%*[^\n]");意思是清除掉輸入緩沖區中不是‘\n’的字符,就是讀取多余的數據丟棄。

scanf("%*c");是清除一個字符,這裡主要是清除上面沒清除的‘\n’

每次輸入數據時,結尾都會按下一個回車符

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved