當前位置:首頁 » 編程語言 » c語言scanf循環

c語言scanf循環

發布時間: 2023-02-22 15:49:35

A. c語言scanf語句導致無法進入循環

問題已經解決,還是比較簡單的。。。一個小問題而已。是scanf函數的問題。

我先貼圖好吧,我運行的結果。

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#define SIZE 50

#define RAT 5

struct movie{

char name[SIZE];

int rating;

};

void * s_gets(char *,int n);

int main()

{

int i=0,j,k;

struct movie *mov;

printf("輸入你想錄入的影片數量 ");

scanf("%d",&k);

mov=(struct movie *) malloc(k*sizeof(struct movie));

printf("輸入你想錄入的第一部影片名稱 ");

while(i<k&&s_gets(mov[i].name,SIZE)!=NULL&&mov[i].name[0]!='')

{


printf("輸入影片序號:");

scanf("%d",&mov[i++].rating);

while(getchar()!=' ')

continue;

puts("輸入下一部影片名稱:(empty line to stop):");

}//printf("%s ",mov[0].name);

if(i==0)

printf("No data entered ");

else

printf("Here is the movie list: ");


for(j=0;j<i;j++)

{

printf("Movie: %s Rating: %d ",mov[j].name,mov[j].rating);


}printf("Bye ");

return 0;

}


void * s_gets(char *ch,int n)

{

char *ret_val;

char *find;

fflush(stdin); //getchar();可選,最好用fflush函數;

ret_val=fgets(ch,n,stdin);

if(ret_val)

{

find=strchr(ch,' ');

if(find)

*find='';

else

while(getchar()!=' ')

continue;

}

return ret_val;

}

然後貼我的源碼,就多了一行代碼而已,在你的s_get函數里的fgets函數前面加了個fflush函數,位置,我已經加粗標明出來了。。。問題也很簡單,就是在第一個scanf函數的時候,你是按了回車的,所以第二次使用scanf的時候,fgets直接吃掉了回車,這是我們不需要的,所以在這個之前,我們必須先把stdin輸入流里的回車,清理掉,使用fflush函數一次清理了stdin輸入流,等stdin輸入流干凈了之後,再調用fgets就不會出錯了,當然也可以使用getchar函數把回車吃掉,不過比較麻煩,我一般喜歡用fflush函數,反正輸入前,那些臟東西,我們不關心,也不需要,而且萬一有多個呢,getchar只能清理一個臟東西,而fflush函數,直接全部沖掉,來的簡單方便。。。。

問題解決,請採納!不懂再問。

B. C語言循環里有scanf時怎麼跳出循環

可以約定輸入-99999就退出:

#include<stdlib.h>
int main(void)
{
double *p=NULL;
double ble[2]={0};
while(true)
{
scanf("%lf",&ble[0]);
double *p=(double*)malloc(sizeof(double));
if(!p) return NULL;
*p=ble[0];
if(ble[0]==-99999) break;
}
return 0;
}
或者,約定在數字後面緊跟著輸入@就退出循環:
#include<stdlib.h>
int main(void)
{char c;
double *p=NULL;
double ble[2]={0};
while(true)
{
scanf("%lf%c",&ble[0],&c);
double *p=(double*)malloc(sizeof(double));
if(!p) return NULL;
*p=ble[0];
if(c=='@') break;
}
return 0;
}

C. c語言 循環輸入 scanf 急!!!急!!!急!!!

do { printf("\n是Y/否N進行新的計算: (Y/N) ? ");
// getchar();
scanf("%c",&W);
printf("\n%c,%d",W,W);

fflush(stdin);
if(((W=='Y')||(W=='y'))!=1) break;
} while(1);
這樣既可

知道為什麼么?假設你只是輸入一個 Y 然後回車,scanf函數也只是讀取了Y這個字元而已,你的回車符沒有被讀走,於是下一次循環的時候,scanf讀取到的就是一個回車符,因為退出了循環,就那麼簡單

D. C語言中 scanf()與循環問題

#include"stdio.h"
main()
{
int
a;
printf("%d",scanf("%d",&a));
//
這個很明顯的告訴我們
scanf()返回的並非我們輸入的數值,而返回的是輸入了幾個數字,這里只輸入了一個數
所以返回值為1
如果改為
scanf("%d",&a);
printf("%d",a);
則是把我們輸入的值a存儲在內存中,通過printf()語句顯示出來
//
}

E. c語言scanf循環輸入問題

用scanf函數輸入數值時,可以指定列寬如scanf("%3f",&a);表示截取3個數字字元賦給a,如輸入2345,它只將234賦給a,輸出結果為234.000000。不可以指定輸入精度,如scanf("%3.2f",&a)格式不合法的。詳情請查閱:C語言程序設計(第2版) 譚浩強 著,第85頁。

F. C語言中 scanf()與循環問題

使用while的時候盡量不要使用組合條件,而應該採用這種形式:

while(1){
if(條件1)break;
//...
if(條件2)continue;
//...
if(條件3)return;
//...
}


所以可以將你的改為:

while(1)
{
scanf("%c",&u);
if(u=='p')
{
break;
}
else
{
case......//補充
}

}

G. C語言Scanf()死循環問題。

把scanf()換成下面例子中的函數試試:

#include<stdio.h>
#include<stdlib.h>
#defineHEAD_N10//Input_uint(FILE*fp)函數中限制輸入的最大整數位數
intInput_uint1();//無符號整形輸入函數
intInput_uint2(intdigit);//無符號整形輸入函數截取前digit位
intmain()
{
inta,b;
printf("請輸入賦值給變數a的整數:");
a=Input_uint1();
printf("請輸入賦值給變數b的整數(截取前3位):");
b=Input_uint2(3);
printf("a=%d;b=%d ",a,b);
return0;
}
intInput_uint1()
{
intcount_a=0,ratio=1,count_c=0,number=0,judge=1;
//count_a計數變數;ratio轉換系數,1,10,100等;
//count_c計數變數;number函數返回值;
//judge輸入判斷變數,-1出錯;
charstr[HEAD_N];

for(count_a=0;count_a<HEAD_N;count_a++)
str[count_a]='0';
do
{
if(judge==1);
else
{
printf(" 輸入錯誤。請輸入一個大於等於零的整數:");
}
judge=1;

for(count_a=HEAD_N-1,count_c=HEAD_N-1;count_a>=0;count_a--,count_c--)
{
str[count_a]=getchar();
if(!((str[count_a]>='0'&&str[count_a]<='9')||(str[count_a]==10)))
judge=-1;
if(str[count_a]==10||count_a==0)
{
if(str[count_a]==10)
break;
if(str[count_a]!=10&&count_a==0)
{
for(;;)
{
count_a=getchar();
if(!((count_a>='0'&&count_a<='9')||(count_a==10)))
judge=-1;
if(count_a==10)
break;
}
}
count_a=0;
}
}
if(judge>0)
{
for(count_a=count_c+1;count_a<HEAD_N;count_a++)
{
if(str[count_a]>='0'&&str[count_a]<='9')
{
number+=(str[count_a]-'0')*ratio;
ratio*=10;
}
else
break;
}
}
}while(judge<0);
returnnumber;
}
intInput_uint2(intdigit)
{
intcount_a=0,ratio=1,count_c=0,number=0,judge=1;
//count_a計數變數;ratio轉換系數,1,10,100等;
//count_c計數變數;number函數返回值;
//judge輸入判斷變數,-1出錯;
charstr[HEAD_N];
if(digit>HEAD_N)
digit=HEAD_N;

for(count_a=0;count_a<digit;count_a++)
str[count_a]='0';
do
{
if(judge==1);
else
{
printf(" 輸入錯誤。請輸入一個大於等於零的整數:");
}
judge=1;

for(count_a=digit-1,count_c=digit-1;count_a>=0;count_a--,count_c--)
{
str[count_a]=getchar();
if(!((str[count_a]>='0'&&str[count_a]<='9')||(str[count_a]==10)))
judge=-1;
if(str[count_a]==10||count_a==0)
{
if(str[count_a]==10)
break;
if(str[count_a]!=10&&count_a==0)
{
for(;;)
{
count_a=getchar();
if(!((count_a>='0'&&count_a<='9')||(count_a==10)))
judge=-1;
if(count_a==10)
break;
}
}
count_a=0;
}
}
if(judge>0)
{
for(count_a=count_c+1;count_a<digit;count_a++)
{
if(str[count_a]>='0'&&str[count_a]<='9')
{
number+=(str[count_a]-'0')*ratio;
ratio*=10;
}
else
break;
}
}
}while(judge<0);
returnnumber;
}

H. C語言裡面的scanf函數在循環裡面的用法

不需要,如果你用逗號隔開的話,輸入數據時就要輸入逗號。
比如scanf("%d%d",
&a,
&b);輸入時直接輸入a的值,回車,然後輸入b的值,回車。
如果是scanf("%d,%d",
&a,
&b);輸入的時候就要輸入a的值,然後輸入個逗號,再輸入b的值回車。

熱點內容
android混淆代碼 發布:2024-11-08 05:54:18 瀏覽:947
用什麼做資料庫 發布:2024-11-08 05:54:18 瀏覽:239
rds雲資料庫 發布:2024-11-08 05:54:09 瀏覽:75
加密和黎曼猜想 發布:2024-11-08 05:33:08 瀏覽:420
中央編譯出版社一年的銷售額 發布:2024-11-08 05:32:15 瀏覽:562
c語言結構體位域 發布:2024-11-08 05:31:00 瀏覽:553
androidv7包 發布:2024-11-08 05:26:41 瀏覽:541
停止共享文件夾腳本 發布:2024-11-08 05:20:54 瀏覽:40
查看資料庫的sid 發布:2024-11-08 05:16:47 瀏覽:831
菲斯塔dlxdct是哪個配置 發布:2024-11-08 05:06:09 瀏覽:213