當前位置:首頁 » 編程語言 » c語言中scanf的n有什麼作用
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言中scanf的n有什麼作用

發布時間: 2023-02-05 15:05:48

『壹』 c語言中scanf("%f\n" , &a); 其中\n起換行作用,對嗎,求解釋

錯。
空白符:任何格式字元串中的單個空白符處理所有來自輸入的可用連續空白符(如同通過於循環中調用 isspace 確定)。注意格式字元串中 "\n" 、 " " 、 "\t\t" 或其他空白無區別。
https://zh.cppreference.com/w/c/io/fscanf

『貳』 scanf在c語言中的作用

scanf是c語言中的標准庫函數,主要作用是接收用戶輸入的數據。

scanf是C語言中的輸入函數,可以從鍵盤獲得用戶輸入,和printf輸出功能正好相反。scanf的輸入格式是多種多樣的,使用時需根據情況選擇,最常用的是十進制整數型輸入%d。

scanf的使用和輸入格式

scanf("%d", &c); //輸入一個整數並賦值給c。

scanf("%d", &d); //輸入一個整數並賦值給d。

scanf("%d,%d", &c, &d); //輸入兩個整數並分別賦值給c、d。

scanf("%d %d", &c, &d); //輸入兩個整數並分別賦值給c、d。

前兩個scanf:輸入一個整數,按下回車鍵,scanf會讀取鍵盤輸入,並把數據賦值給c(或d);後兩個scanf:都是一樣功能,輸入格式不同,對於scanf(),輸入數據的格式要和控制字元串的格式保持一致。比如:輸入15 24回車,輸入15,24回車,同樣的把值分別賦給c和d。

『叄』 Scanf函數有一個\n,其作用是什麼

scanf()是ansi
c的標准庫函數,它在文件stdio.h中定義,原型為
int
scanf(
const
char
*format
[,argument]...
);從中可以知道函數返回一個整型值,它有兩個參數,格式控制和參數表,格式控制就是雙引號內的字元串,一般有格式控制字元和分隔符組成,後面的參數列表要和前面的格式控制字元一一對應,並且要求參數列表為指針類型,這個函數的作用是從標准輸入設備獲取輸入值,並存儲到參數列表中指針所指向的內存單元,如果讀入成功,函數會返回讀入成功的數據的個數
問題的中的代碼沒有語法錯誤,運行時需要兩次等待輸入,m的值為第二次讀入成功的數據的個數

『肆』 scanf中的\n具體什麼作用

題目問的是在scanf中的作用,回答的和問題沒用任何關系
\n為分隔符之一,在scanf中沒有什麼作用

『伍』 c語言中scanf有什麼作用

C語言中scanf是標准庫函數,主要用來接收用戶輸入的數據。

scanf與printf函數一樣,都被定義在頭文件stdio.h里,因此在使用scanf函數時要加上#include <stdio.h>。它是格式輸入函數,即按用戶指定的格式從鍵盤上把數據輸入到指定的變數之中。

函數格式:int scanf(char *format, args, ...);

功 能:從標准輸入設備按format指定格式輸入數據給args所指向的內存單元;

返 回 值 :讀入並賦給args的數據個數。遇文件結束返回EOF,出錯返回0。

(5)c語言中scanf的n有什麼作用擴展閱讀

基本特性

1、高級語言:它是把高級語言的基本結構和語句與低級語言的實用性結合起來的工作單元。

2、結構式語言:結構式語言的顯著特點是代碼及數據的分隔化,即程序的各個部分除了必要的信息交流外彼此獨立。這種結構化方式可使程序層次清晰,便於使用、維護以及調試。

C 語言是以函數形式提供給用戶的,這些函數可方便的調用,並具有多種循環、條件語句控製程序流向,從而使程序完全結構化。

3、代碼級別的跨平台:由於標準的存在,使得幾乎模式同樣的C代碼可以用於多種操作系統,如Windows、DOS、UNIX等等;也適用於多種機型。C語言對編寫需要進行硬體操作的場合,優於其它高級語言。

4、使用指針:可以直接進行靠近硬體的操作,但是C的指針操作不做保護,也給它帶來了很多不安全的因素。C++在這方面做了改進,在保留了指針操作的同時又增強了安全性,受到了一些用戶的支持。

但是,由於這些改進增加語言的復雜度,也為另一部分所詬病。Java則吸取了C++的教訓,取消了指針操作,也取消了C++改進中一些備受爭議的地方,在安全性和適合性方面均取得良好的效果,但其本身解釋在虛擬機中運行,運行效率低於C++/C。

一般而言,C,C++,java被視為同一系的語言,它們長期占據著程序使用榜的前三名。

『陸』 c語言中scanf("\n%c",&a);和scanf("\n");中的\n有什麼作用啊

\n
換行
這是一個轉義字元(也是一種字元)形式像\0是結束標記一樣。

『柒』 Scanf函數有一個\n,其作用是什麼

用:
scanf函數,與printf函數一樣,都被定義在stdio.h里,因此在使用scanf函數時要加上#include<stdio.h>。它是格式輸入函數,即按用戶指定的格式從鍵盤上把數據輸入到指定的變數之中,其關鍵字最末一個字母f即為「格式」(format)之意。
[編輯本段]scanf函數的一般形式
scanf(格式控制,地址表列)
int scanf(char *format[,argument,...]);
「格式控制」的含義同printf函數;「地址表列」是由若干個地址組成的表列,可以是變數的地址,或字元串的首地址。
scanf()函數返回成功賦值的數據項數,讀到文件末尾出錯時則返回EOF。
例:使用scanf函數輸入數據。
在visual c++ 6.0上的編寫方式。
#include<stdio.h>
void main()
{
int a,b,c;
printf("please input a,b,c");
scanf("%d,%d,%d",&a,&b,&c);
printf("a=%d,b=%d,c=%d",a,b,c);
}
在Dev-C++上運行程序為:
#include<stdio.h>
int main()
{
int a,b,c;
printf("please input a,b,c");
scanf("%d,%d,%d",&a,&b,&c);
printf("a=%d,b=%d,c=%d",a,b,c);
fflush(stdin);
getchar();
}
注意上面的scanf("%d,%d,%d",&a,&b,&c);中%d,%d,%d之間有逗號,在輸入數據時也要加逗號,如果去掉逗號,輸入時就不用逗號,而用空格,tab鍵或回車鍵將各個數據隔開
[編輯本段]格式字元說明
%a,%A 讀入一個浮點值(僅C99有效)
%c 讀入一個字元
%d 讀入十進制整數
%i 讀入十進制,八進制,十六進制整數
%o 讀入八進制整數
%x,%X 讀入十六進制整數
%s 讀入一個字元串,遇空格、製表符或換行符結束。
%f,%F,%e,%E,%g,%G 用來輸入實數,可以用小數形式或指數形式輸入。
%p 讀入一個指針
%u 讀入一個無符號十進制整數
%n 至此已讀入值的等價字元數
%[] 掃描字元集合
%% 讀%符號

附加格式說明字元表修飾符說明
L/l 長度修飾符 輸入"長"數據
h 長度修飾符 輸入"短"數據
W 整型常數 指定輸入數據所佔寬度
* 表示本輸入項在讀入後不賦值給相應的變數
[編輯本段]scanf的返回值
scanf的返回值有後面的參數決定
scanf("%d%d", &a, &b);
如果a和b都被成功讀入,那麼scanf的返回值就是2
如果只有a被成功讀入,返回值為1
如果a和b都未被成功讀入,返回值為0
如果遇到錯誤或遇到end of file,返回值為EOF。
且返回值為int型.
[編輯本段]使用scanf函數時應該注意的問題
1、scanf()中的變數必須使用地址。
2、scanf()的格式控制串可以使用其它非空白字元,但在輸入時必須輸入這些字元。
3、在用"%c"輸入時,空格和「轉義字元」均作為有效字元。
問題一:scanf()函數不能正確接受有空格的字元串?如: I love you!
#include <stdio.h>
int main()
{
char str[80];
scanf("%s",str);
printf("%s",str);
return 0;
}
輸入:I love you!
輸出:scanf()函數接收輸入數據時,遇以下情況結束一個數據的輸入:(不是結束該scanf函數,scanf函數僅在每一個數據域均有數據,並按回車後結束)。
① 遇空格、「回車」、「跳格」鍵。
② 遇寬度結束。
③ 遇非法輸入。
所以,上述程序並不能達到預期目的,scanf()掃描到"I"後面的空格就認為對str的賦值結束,並忽略後面的"love you!".這里要注意是"love you!"還在鍵盤緩沖區(關於這個問題,網上我所見的說法都是如此,但是,我經過調試發現,其實這時緩沖區字元串首尾指針已經相等了,也就是說緩沖區清空了,scanf()函數應該只是掃描stdin流,這個殘存信息是在stdin中)。我們改動一下上面的程序來驗證一下:
#include <stdio.h>
#include<windows.h>
int main()
{
char str[80];
char str1[80];
char str2[80];
scanf("%s",str);/*此處輸入:I love you! */
printf("%s",str);
Sleep(5000);/*這里等待5秒,告訴你程序運行到什麼地方*/ /*不是sleep(5) 1,函數名是Sleep不是sleep。2,C/C++中,unsigned Sleep(unsigned)應該是毫秒ms.
scanf("%s",str1);/*這兩句無需你再輸入,是對鍵盤盤緩沖區再掃描 */
scanf("%s",str2);/*這兩句無需你再輸入,是對鍵盤盤緩沖區再掃描 */
printf("\n%s",str1);
printf("\n%s",str2);
return 0;
}
輸入:I love you!
輸出:
I
love
you!
好了,原因知道了,那麼scanf()函數能不能完成這個任務?回答是:能!別忘了scanf()函數還有一個 %[] 格式控制符(如果對%[]不了解的請查看本文的上篇),請看下面的程序:
#include "stdio.h"
int main()
{
char string[50];/*scanf("%s",string);不能接收空格符*/
scanf("%[^\n]",string);
printf("%s\n",string);
return 0;
}
問題二:鍵盤緩沖區殘余信息問題
#include <stdio.h>
int main()
{
int a;
char c; do
{
scanf("%d",&a);
scanf("%c",&c);
printf("a=%d c=%c\n",a,c);/*printf("c=%d\n",c);*/
}while(c!='N');
}
scanf("%c",&c);這句不能正常接收字元,什麼原因呢?我們用printf("c=%d\n",c);將C用int表示出來,啟用printf("c=%d\n",c);這一句,看看scanf()函數賦給C到底是什麼,結果是c=10 ,ASCII值為10是什麼?換行即\n.對了,我們每擊打一下"Enter"鍵,向鍵盤緩沖區發去一個「回車」(\r),一個「換行"(\n),在這里\r被scanf()函數處理掉了(姑且這么認為吧^_^),而\n被scanf()函數「錯誤」地賦給了c.解決辦法:可以在兩個scanf()函數之後加個fflush(stdin);,還有加getch() , getchar()也可以,但是要視具體scanf()語句加那個,這里就不分析了,讀者自己去摸索吧。但是加fflush(stdin);不管什麼情況都可行。

函數名: fflush
功 能: 清除一個流
用 法: int fflush(FILE *stream);
)
#include <stdio.h>
int main()
{
int a;
char c; do
{
scanf("%d",&a);
fflush(stdin);
scanf("%c",&c);
fflush(stdin);
printf("a=%d c=%c\n",a,c); }while(c!='N');
}
這里再給一個用「空格符」來處理緩沖區殘余信息的示例:運行出錯的程序:
#include <stdio.h>
int main()
{
int i;
char j;
for(i = 0;i < 10;i++)
{
scanf("%c",&j);/*這里%前沒有空格*/
}
}
使用了空格控制符後:
#include <stdio.h>
int main()
{
int i;
char j;
for(i = 0;i < 10;i++)
{
scanf(" %c",&j);/*注意這里%前有個空格*/
}
}
可以運行看看兩個程序有什麼不同。
問題三: 如何處理scanf()函數誤輸入造成程序死鎖或出錯?
#include <stdio.h>
int main()
{
int a,b,c; /*計算a+b*/
scanf("%d,%d",&a,&b);
c=a+b;
printf("%d+%d=%d",a,b,c);
}
如上程序,如果正確輸入a,b的值,那麼沒什麼問題,但是,你不能保證使用者每一次都能正確輸入,一旦輸入了錯誤的類型,你的程序不是死鎖,就是得到一個錯誤的結果,呵呵,這可能所有人都遇到過的問題吧?解決方法:scanf()函數執行成功時的返回值是成功讀取的變數數,也就是說,你這個scanf()函數有幾個變數,如果scanf()函數全部正常讀取,它就返回幾。但這里還要注意另一個問題,如果輸入了非法數據,鍵盤緩沖區就可能還個有殘余信息問題。正確的常式:
#include <stdio.h>
int main()
{
int a,b,c; /*計算a+b*/
while(scanf("%d,%d",&a,&b)!=2)fflush(stdin);
c=a+b;
printf("%d+%d=%d",a,b,c);
}
補充: fflush(stdin)這個方法在GCC下不可用。(在VC6.0下可以)
以下是 C99 對 fflush 函數的定義:
int fflush(FILE *stream);
如果stream指向輸出流或者更新流(update stream),並且這個更新流
最近執行的操作不是輸入,那麼fflush函數將把任何未被寫入的數據寫入stream
指向的文件(如標准輸出文件stdout)。否則,fflush函數的行為是不確定的。
fflush(NULL)清空所有輸出流和上面提到的更新流。如果發生寫錯誤,fflush
函數會給那些流打上錯誤標記,並且返回EOF,否則返回0。
由此可知,如果 stream 指向輸入流(如 stdin),那麼 fflush 函數的行為是不確定的。故而使用
fflush(stdin) 是不正確的,至少是移植性不好的。
可採用如下方法:
/* 此函數可以和scanf函數一起使用,但使用%c輸入時要注意,即此函數只能用於緩沖區非空的情況 */
void flush()
{
char c;
while ((c=getchar()) != '\n'&&c!=EOF) ;
}
#include <stdio.h>
int main()
{
int a,b,c; /*計算a+b*/
while(scanf("%d,%d",&a,&b)!=2) flush();
c=a+b;
printf("%d+%d=%d",a,b,c);
}
希望對你有幫助 祝你學習進步

『捌』 c語言中,scanf(「%d」,&n)是什麼意思scanf和&n都不知道是啥....求指教

輸入整數,並將這個整數存在變數n中。

scanf()是C語言中的一個輸入函數。與printf函數一樣,都被聲明在頭文件stdio.h里,因此在使用scanf函數時要加上#include <stdio.h>。

&n取變數的地址:&變數名,這將獲得該變數的地址。

(8)c語言中scanf的n有什麼作用擴展閱讀:

在c語言里,&代表取地址符或者邏輯與運算

功能:

取變數的地址:&變數名,這將獲得該變數的地址。

作為位運算符:操作數1&操作數2,將操作數對應位進行比對,二者都為1時返回1,否則返回0。

函數 scanf() 是從標准輸入流stdin (標准輸入設備,一般指向鍵盤)中讀內容的通用子程序,可以說明的格式讀入多個字元,並保存在對應地址的變數中。

函數的第一個參數是格式字元串,它指定了輸入的格式,並按照格式說明符解析輸入對應位置的信息並存儲於可變參數列表中對應的指針所指位置。每一個指針要求非空,並且與字元串中的格式符一一順次對應。

參考資料來源:網路-scanf

網路-&

『玖』 scanf中的\n具體什麼作用

剛才查了一下,lz和我的結果一樣,應該是書上錯了
在scanf里
\n
很特別的,不是要求輸入一個回車換行
引用一下別人的說法:
過濾空格、製表符、回車等輸入,也就是說
scanf("%d\n",
&i);
printf("%d\n",
i);
你輸入一個數後,它是不會立即顯示的,要等再接收到一個非(空格、製表符、回車)的輸入scanf語句才結束。
但請注意的是,最後輸入的那個非(空格、製表符、回車)的東西是不會被這個scanf讀進來的,而是留在輸入流里。
所以3會被x讀入,也就是說最後的6沒有被讀入

『拾』 誰幫我看下 C語言問題scanf中加\n之後的作用

朋友,看來你還是一個c的初學者,我也是,不過我還是能幫你一下,不知你知不知道c的緩沖系統?當你從鍵盤輸入數據時,是先放在該緩沖中,然後scanf才從該緩沖中讀數據,你不加\n時,你輸入i的值,然後回車想再輸入m的值吧?這時送到緩沖中的就是i的值和一個回車符,所以scanf第一次讀的是i,第二次讀的就是一個回車符,所以printf(" %c\n",m);輸出的是回車,而不是你理想中的m值,所以要加\n讀掉那個多餘的回車符,第二個scanf才能讀到正確的m值,說的可能不是很清楚,要是不明白的話加我QQ吧 366485362,我是湖南大學軟體 學院大一的,現在也在學c