scanf函數

 今天試着以遞歸的方式用C寫了個斐波那契數列,最後我想經過scanf函數從控制檯中輸入一個整形數,輸入出該整形數據對應的結果是多少.函數

其中是這麼定義的  :  int nu  = scanf("%d",&nu);調試

控制檯輸入一個整形數3,回車後,程序進入了死循環。調試輸出後發現輸入3後,nu的值爲1,試着輸入其餘的整形數nu仍是1。遞歸

因而我將代碼改了一下  int nu; scanf("%d",&nu); 在控制輸入3後,打印輸出的nu爲3     -- 這纔是我想要的結果. 但爲何會這樣呢?內存

  解釋第一個: 按JAVA的理解應該是scanf從控制檯獲得輸入的值,而後再賦值給nu纔是.    通過網上查詢後,終於知道爲何了,由於scanf的返回值是將匹配成功的個數返回.  也就是說當時我輸入的是3,scanf用%d去匹配並讀入文件,只匹配到一個而且讀入文件的也只有一個因此返回是1,nu接收到這個值也就是1。字符串

  解釋第二個:&nu中的&是地址運算符,&nu指nu在內存中的地址,scanf經過地址將nu存入到變量nu中。因此輸出的nu 爲控制檯輸入的值。get

  總結下來就是scanf的賦值與返回值的問題.變量

 若是改爲: int nu,nu1,nu2;
      nu1 = scanf("%d",&nu);循環

printf("nu=%d   nu1=%d\n",nu,nu1);程序

  nu1 = scanf("%d,%d",&nu,&nu2); (輸入時用,號隔開)
printf("nu=%d   nu1=%d\n",nu,nu1);   這樣就會更加明白scanf的返回值和賦值是怎麼一回事了. 總結

//    關於輸入與輸出 

輸入: scanf();  輸入的字符串不能有空格      gets();   能夠有空格

輸出:printf(「%s」,str);        puts(str);  輸出時自動換行

相關文章
相關標籤/搜索