使用scanf函式遇到的問題

2021-06-26 17:10:04 字數 1280 閱讀 9224

用c語言寫乙個程式,實現線性列表的一些操作,輸入相應的命令執行相對的操作,為了簡潔主要的命令有建立列表命令c、列印列表命令p,退出程式命令e。**如下:

list.h 標頭檔案**:

typedef struct node/*這裡的list是乙個student結構體列表*/

list ;

list * create();

void print(list * l);

list * create()/* 這裡建立的列表沒有頭節點*/

else

while(1)

else

}return head;

}void print(list * l)}}

主程式stu.c如下:

#include "stdio.h"

#include "conio.h"

#include "list.h"

main()

else 

case 'e' : exit(0);

default :printf("you input error !\n");break;

}printf("please input command!\n");

scanf("%c",&opter);

/*ch=getchar();*/}}

編譯遠行,程式錯誤如下:

建立列表時輸入不能停止,且提示輸入的語句列印了兩條。經過跟蹤發現是scanf函式出現問題,在輸入字元時enter被自動賦值給了字元變數,導致語句自動遠行,提示語句輸出兩遍,且由於nu被賦值enter不能停止。

查詢scanf函式的一些資訊後,編寫程式判斷scanf函式對輸入的影響:

#include "stdio.h"

#include "conio.h"

main()/*這裡主要測試scanf函式在字元,整型,字串的輸入時enter相對影響*/

結論:使用scanf函式輸入時,若enter鍵在使用scanf函式輸入字元前,enter都會被賦值給字元變數,整型和字串沒有影響,可以定義乙個變數ch接受enter鍵,ch=getchar();

之前的列表程式中,只要把全部的注釋語句去掉程式就可以正常遠行。結果如下:

至於為什麼scanf函式會出現這樣的錯誤,還沒有理解,如果有誰知道還望不吝賜教!

使用scanf字元輸入時遇到的問題

今天用scanf給一字元陣列迴圈複製時遇到了問題 include stdio.h int main a 9 0 printf s a return 0 發現scanf會被跳過,搜了一下網 原來scanf 或者getchar 是從標準輸入緩衝區中讀取輸入的資料,而 c的字元輸入格式會接收回車字元,在輸...

scanf讀字元遇到的問題

最近做題發現乙個問題 scanf c ch 讀入乙個字元,輸出ascii碼的值 include using namespace std char ch intmain return0 輸出結果是 發現輸入乙個a,執行了兩次迴圈,輸出了兩個值 97是a的ascii碼的值,用cin讀 include u...

scanf 函式問題

今晚研究一下scanf函式 大部分內容 於c語言中文網中 c語言常見問題集 我只不過是做了綜合 1 首先,傳給scanf的必須是指標,對於每個值,scanf都會寫入指標所值的位置,所以必須加 在寫程式時候經常會忘記。2 scanf 函式的返回值反映的是按照指定的格式符正確讀入的資料的個數。如果輸入資...