DIV CSS 佈局教程網

 DIV+CSS佈局教程網 >> 網頁腳本 >> JavaScript入門知識 >> AJAX入門 >> AJAX詳解 >> 淺談C語言中的垃圾字符
淺談C語言中的垃圾字符
編輯:AJAX詳解     
在C語言中,如果使用字符型變量(就是char型)時在有連續輸入的情況下,很容易因為出現垃圾字符而導致程序的流程非法。
        看下面,簡單的一段代碼:
        #include "stdio.h"

        main()
       {
                  char a,b;
                  printf("input a:");
                  scanf("%c",&a);                /*或a=getchar();*/
                  printf("a=%c\n",a);
                  printf("input b:");
                  scanf("%c",&b);               /*或b=getchar();*/
                  printf("b=%c\n",b); 
        }
這段代碼確實挺簡單的,但是卻隱藏著很難發現的問題。當在執行了printf("input a:");這句後要求我們做輸入的時候,隨便輸入一個數,然後按回車,程序繼續往下執行。沒等我們做第二次輸入的時候程序就已經結束了。把scanf()換成getchar()也一樣存在問題。
        為什麼會有這樣的問題呢?那是因為在我們做了第一次輸入時,並按下回車,使程序繼續執行。而那個回車也隨之進入了流當中。而遇到第二個scanf()時,scanf()把回車當作是第二次輸入的字符而接收。因此程序也就忽略了輸入而繼續執行了。這個回車就是在做輸入時產生的垃圾字符了。我第一次遇到它時,是我在寫循環時遇到的,由於垃圾字符的原因,使得循環提早結束,而破壞了我預期的流程(第一次見垃圾字符時郁悶死我了)。那怎麼才能防止垃圾字符的破壞,或是避免它的呢?而我的解決方法只有兩種(有其他種的話,一定要告我)。
        第一種方法是多定義一個字符變量,如char c;這樣。把變量c分別放到輸入後面。如:
        a=getchar();
        c=getchar();
        ……
        b=getchar();
        c=getchar();
這樣可以使垃圾字符自動進入變量c中,而不破壞我們正確的流程和輸入。如果是scanf()的話,可以按照下面的方式來寫:scanf(”%c%c”,&a,&c);這樣的效果跟使用getchar()是一樣的。
        這樣的方法無疑是浪費了一個內存空間,而且增加了很多的冗余代碼。
        第二種方法是使用getche()函數,而不使用scanf()和getchar()。這個函數也是接收字符的,但是它不等待回車的輸入!而直接把字符送入流中,這樣就可以避免垃圾字符的出現了。

XML學習教程| jQuery入門知識| AJAX入門| Dreamweaver教程| Fireworks入門知識| SEO技巧| SEO優化集錦|
Copyright © DIV+CSS佈局教程網 All Rights Reserved