c語言scan
『壹』 c語言中scan()什麼意思
你要問的是scanf()函數吧
scanf編輯
與printf函數一樣,都被定義在頭文件stdio.h里,因此在使用scanf函數時要加上#include <stdio.h>。它是格式輸入函數,即按用戶指定的格式從鍵盤上把數據輸入到指定的變數之中。
函數原型編輯int scanf(const char *format,...);
函數 scanf() 是從標准輸入流stdio (標准輸入設備,一般是鍵盤)中讀內容的通用子程序,可以說明的格式讀入多個字元,並保存在對應地址的變數中。[1]
其調用形式為: scanf("<格式說明字元串>",<變數地址>);變數地址要求有效,並且與格式說明的次序一致
scanf()函數返回成功賦值的數據項數,讀到文件末尾出錯時則返回EOF。
如:
scanf("%d %d",&a,&b);
如果a和b都被成功讀入,那麼scanf的返回值就是2
如果只有a被成功讀入,返回值為1
如果a和b都未被成功讀入,返回值為0
如果遇到錯誤或遇到end of file,返回值為EOF。
且返回值為int型.
例:使用scanf函數輸入數據。
#include<stdio.h>
int main(void)
{
int a,b,c;
printf("輸入a,b,c\n");
scanf("%d%d%d",&a,&b,&c);
printf("a=%d,b=%d,c=%d\n",a,b,c);
fflush(stdin);
return 0;
}
&a,&b,&c中的&是地址運算符,&a指a在內存中的地址。scanf的作用是:按照a,b,c的內存地址將輸入的數據存到a,b,c中去。變數a,b,c的地址是在編譯連續階段分配的(存儲順序由編譯器決定)。
這里注意:如果scanf中%d是連著寫的如「%d%d%d」,在輸入數據時,數據之間不可以加逗號,只能是空格或
tab鍵或者回車鍵——「2 3 4」 或
「2(按tab)3(按tab)4(按tab)」。若是「%d,%d,%d」,則在輸入數據時需要加「,」,如「2,3,4」.
『貳』 C語言中如何傳入(scan)一個類似矩陣的文件
用這個吧:假設存儲以上矩陣的文件名字為matrix.txt,保存在D盤下面。則
/*readmatrix.c*/
#include<stdio.h>
/*thepathofthefileisasfollows.*/
charfilename[]="D:\matrix.txt";
/*thecontentoffile'matrix.txt'
* 1100 spawn 0 0
* 40 io 0 26
* 45 io 0 27
* 1600 spawn 1 0
* 60 io 0 12
* 100 exit 0 0
* 30 io 1 20
* 80 io 1 6
* 1000 exit 1 0
*/
intmain(intargc,char*argv[]){
FILE*fp=NULL;
charmc[36][10];
char(*p)[10]=mc,(*q)[10];
//openfile
fp=fopen(filename,"r");//openafiletoread
if(NULL==fp){
printf("file%sopenfailed. ",filename);
return-1;
}
//readfile
while(EOF!=fscanf(fp,"%s",p)){
p++;
}
//closefile
fclose(fp);
q=mc;
while(q!=p){
if((p-1-q)%4==0){
printf("%s ",q);
}
else{
printf("%s ",q);
}
q++;
}
return0;
}
『叄』 如圖,c語言做了個for循環scan(),結果為什麼順序會跳
你個scanf接收字元輸入,每次輸入字元後回車,回車也算一個字元,被下一次循環scanf直接接收了,所以才會跳。
解決方法很多,比如:
一、在每次輸入完畢後,用scanf或getchar或getch把回車符號接收掉。
二、在每次輸入完畢後,用fflush清除輸入緩沖區。
下面是演示代碼:
#include<stdio.h>
int main()
{
int i;
char c;
//方法一:for(i=0;i<5;++i,scanf("%c",&c))
//方法二:for(i=0;i<5;++i,getchar())
//方法三:
for(i=0;i<5;++i,fflush(stdin))
{
printf("char%d:",i);
scanf("%c",&c);
printf("%c ",c);
}
return 0;
}
『肆』 C語言中的scanf是什麼意思
scanf()是C語言中的一個輸入函數。
與printf函數一樣,都被聲明在頭文件stdio.h里,因此在使用scanf函數時要加上#include <stdio.h>。(在有一些實現中,printf函數與scanf函數在使用時可以不使用預編譯命令#include <stdio.h>。)
函數 scanf()是格式輸入函數,即按用戶指定的格式從鍵盤上把數據輸入到指定的變數之中。scanf() 從標准輸入流stdin中讀內容的通用子程序,可以說明的格式讀入多個字元,並保存在對應地址的變數中。
(4)c語言scan擴展閱讀:
scanf()用法舉例:
用scanf輸入一個整數
#include<stdio.h>
int main(){
int num=0;
printf(「請輸入一個個整數」);
scanf(「%d,&num);
printf(「num是%d 」,num);
scanf(「%*[^ ]」);
scanf(「%*c」);//清空緩沖區
printf(「請輸入一個個整數」);
scanf(「%d,&num);
printf(「num是%d 」,num);
return 0;
}
參考資料來源:網路-scanf
『伍』 c語言中要怎樣把兩個scan的值f寫在一行里
printf和scanf兩行語句只要在兩行語句的引號里沒有換行符就會在在同一行了!
『陸』 C語言的scanf語句格式
例:使用scanf函數輸入數據。
#include<stdio.h>
intmain(void)
{
inta,b,c;
printf("Givemethevalueofa,b,cseperatedwithwhitespaces: ");
scanf("%d%d%d",&a,&b,&c);
printf("a=%d,b=%d,c=%d ",a,b,c);
return0;
}
&a,&b,&c中的&是定址操作符,&a表示對象a在內存中的地址[3],是一個右值。變數a,b,c的地址是在編譯階段分配的(存儲順序由編譯器決定)。
這里注意:如果scanf中%d是連著寫的如「%d%d%d」,在輸入數據時,數據之間不可以用逗號分隔。
只能用空白字元(空格或tab鍵或者回車鍵)分隔——「2 (空格)3(tab) 4」 或 「2(tab)3(回車)4」等。若是「%d,%d,%d」,則在輸入數據時需要加「,」,如「2,3,4」。
(在有一些實現中,printf函數與scanf函數在使用時可以不使用預編譯命令#include <stdio.h>。)它是格式輸入函數,即按用戶指定的格式從鍵盤上把數據輸入到指定的變數之中。
scanf 是 scan format 的縮寫,意思是格式化掃描,也就是從鍵盤獲得用戶輸入,和 printf 的功能正好相反。
(6)c語言scan擴展閱讀:
scanf函數使用注意問題:
(1)在高版本的 Visual Studio 編譯器中,scanf 被認為是不安全的,被棄用,應當使用scanf_s代替 scanf。
(2) 對於字元串數組或字元串指針變數,由於數組名可以轉換為數組和指針變數名本身就是地址,因此使用scanf()函數時,不需要在它們前面加上"&"操作符。
(3) 可以在格式化字元串中的"%"各格式化規定符之間加入一個整數,表示任何讀操作中的最大位數。
(4) scanf函數中沒有類似printf的精度控制。
如: scanf("%5.2f",&a); 是非法的。不能企圖用此語句輸入小數為2位的實數。
(5) scanf中要求給出變數地址,如給出變數名則會出錯
如 scanf("%d",a);是非法的,應改為scanf("%d",&a);才是合法的。
(6) 在輸入多個數值數據時,若格式控制串中沒有非格式字元作輸入數據之間的間隔,則可用空格,TAB或回車作間隔。
C編譯在碰到空格,TAB,回車或非法數據(如對「%d」輸入「12A」時,A即為非法數據)時即認為該數據結束。
(7) 在輸入字元數據(%c)時,若格式控制串中無非格式字元,則認為所有輸入的字元均為有效字元。
參考資料來源:網路-scanf
『柒』 c++中scan f的用法
scanf()是C語言中的一個輸出函數。與printf函數一樣,都被聲明在頭文件stdio.h里,因此在使用scanf函數時要加上#include 。(在有一些實現中,printf函數與scanf函數在使用時可以不使用預編譯命令#include 。)它是格式輸入函數,即按用戶指定的格式從鍵盤上把數據輸入到指定的變數之中。
『捌』 這是個關於SCAN演算法的c語言描述,程序無錯,運行有錯
你的代碼是有問題的,網路這個沒法完整的上傳代碼
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#include<math.h>
typedefintstatus;
#defineOK1#defineERROR0
typedefstructlikelist
{
intdata;
structlikelist*front,*next;//建立雙向鏈表
}Listnode;
Listnode*Create_list(Listnode*head,intn)//建立鏈表
{
Listnode*p,*q;
inti;
head=(Listnode*)malloc(sizeof(Listnode));
if(!head)
{
exit(-1);//創建不成功則退出程序
}
head->next=NULL;
p=head->next;
q=head;
printf("請輸入%d個進程所要訪問的磁軌號:",n);
for(i=0;i<n;i++)
{
p=(Listnode*)malloc(sizeof(Listnode));
if(!p)
{
exit(-1);
}
q->next=p;
scanf("%d",&p->data);
p->front=q;
p->next=NULL;
q=p;
}
printf("輸入磁軌號已經完成 ");//用於測試程序在哪裡執行出錯
returnhead;
}
Listnode*Sort_list(Listnode*head)//對鏈表排序
{
inta;
if(!head->next)
{
printf("表空!");
exit(-1);
}
Listnode*p,*q;
p=head->next;
q=p->next;
for(;q->next!=NULL;p=p->next,q=q->next)
{
if((p->data)>(q->data))
{
a=p->data;
p->data=q->data;
q->data=a;
}
}/*while(q->next!=NULL){if((p->data)>(q->data)){a=p->data;p->data=q->data;q->data=a;}p=p->next;q=q->next;}*/
returnhead;
}
voidFangwen_list(Listnode*head,intn,intm)//訪問鏈表,向磁軌增加的方向,m用於記錄開始訪問的磁軌號,n記錄總共磁軌號數目
{
Listnode*p,*q;//定義指向節點的指針
inti,j;
floatdistance=0;
floatsum=0;
floatave;
p=head->next;
printf("將要從%d號磁軌向磁軌號增加的方向訪問: ",m);
printf("被訪問的下一個磁軌號 本次移動的距離 ");
for(i=0;i<n;i++)
{
if(p->data>=m)
{
q=p->front;
j=i;
break;
}
else
{
continue;
}
}
for(;i<n;i++)
{
printf(" %d",p->data);
distance=(float)fabs(m-(p->data));
m=p->data;
sum=(float)(sum+distance);
printf(" %f ",distance);//用於格式化的輸出,
p=p->next;
}
printf(" ");
/*
for(;q!=head;)
{
printf(" %d",q->data);
distance=(float)fabs(m-q->data);
m=q->data;
sum=(float)(sum+distance);
printf(" %f ",distance);
q=q->front;
}
printf(" ");
*/
ave=(float)sum/n;//計算出平均長度
printf("平均尋道長度為:%.2f ",ave);
}
intmain()
{
Listnode*head;
intn;
intm;
printf("請輸入進程要訪問的磁軌的總數:");
scanf("%d",&n);
head=Create_list(head,n);//鏈表返回頭指針應該賦值,
Sort_list(head);
printf("請輸入你要最開始訪問的磁軌號:");
scanf("%d",&m);
Fangwen_list(head,n,m);
system("pause");
return0;
}
『玖』 關於C語言中 scan的一個問題
有的時候回車會被程序讀入,不方便管理。
也就是說:scanf()和getchar()函數是從輸入流緩沖區 中讀取值的,而並非從鍵盤(也就是終端)緩沖區讀取。而讀取時遇到回車(\n)而結束的,這個\n會一起讀入輸入流緩沖區的,所以第一次接受輸入時取走字 符後會留下字元\n,這樣第二次的讀入函數直接從緩沖區中把\n取走了,顯然讀取成功了,所以不會再從終端讀取!因此後面只要加上fflush(stdin)函數釋放緩沖區數據就可以了.