scanf()的使用及一些注意事項


  相比較Java的鍵盤錄入,C語言的scanf有一些需要注意的細節,為了避免使用的時候踩坑,我們就來了解一下scanf。

  scanf()是C語言的格式輸入函數,和printf函數一樣被聲明在stdio.h頭文件中,它的基本使用很簡單:

1 int a;
2 scanf("%d",&a);//程序執行到這里時,就等待用戶輸入;它接收的是變量的地址
          //所以一般情況下除了指針型變量和數組名要給變量加上取地址符&

注意事項一:內存溢出(輸入的類型要和占位符一致就不拿出來單獨啰嗦了)

1     char s[1];//長度為1,只能存一個元素
2     printf("請輸入s的值:"); 
3     //因為這里使用的是數組名,數組名就是地址,所以不用加取地址符& 
4     scanf("%s",s); //輸入abcd 
5     printf("s=%s\n",s);       

 

 

 誒,照結果來看abcd都被存進字符數組s里面了,但是我們知道,s是不是只能存一個字節的數據,所以bcd已經非法占用內存了。雖然有時候程序看起來會正常執行,但是它會留下一些隱患。使用的時候需要注意這一點。

注意事項二:錄入多個變量

1     double m,n;
2     printf("請輸入m、n:"); 
3     //占位符不寫東西時,錄入的時候默認以空格分隔
    //如果占位符用逗號分隔,錄入的時候用逗號分隔 4 scanf("%lf%lf",&m,&n);// scanf("%lf,%lf",&m,&n); 5 printf("n=%lf m=%lf\n",m,n);

 

 

 如果我將第四行代碼換成注釋的代碼就需要這樣用:

 

 

 輸入的時候用空格分隔會發生什么呢

 

可以看到,n的值沒能錄入。建議使用默認的分隔符,占位符中不要自己加東西。

注意事項三:char類型

 1     char name[10]="";
 2     int age=0;
 3     double sal=0.0;
 4     char gender='a';//m代表man w代表woman 
 5     
 6     printf("請輸入名字:");
 7     scanf("%s",name);//數組名,不用加&
 8      
 9     printf("請輸入年齡:");
10     scanf("%d",&age);
11      
12     printf("請輸入薪水:");
13     scanf("%lf",&sal);
14      
15     printf("請輸入性別:");
16      //scanf中char類型會出現接收上面的回車字符,一個字節被占了,所以獲取不到錄入的數據 
17     scanf("%c",&gender); 
18     //所以再接收一次 
19     scanf("%c",&gender); 
20           
21     printf("姓名:%s \n年齡:%d \n薪水:%lf \n性別:%c",name,age,sal,gender);  

先看一下去掉19行代碼會發生什么:

 

 

 亂吧,性別沒法輸入吧;加上19行之后,也就是再獲取一次字符之后:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM