C语言缺少键盘输入功能 [英] the C language lack for keyboard input functions

查看:73
本文介绍了C语言缺少键盘输入功能的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述



认真思考库函数很重要

i认为对于tame(domare)输入流是有用的

函数就像这些我用的。

i不知道他们是对的


注意:当询问输入时:需要一个范围来验证

(最后整数,浮动和双重)


; int cf(void);

_cf:

mov eax,0

adc eax,0

ret


/ * int __stdcall getl_m(void * buf,int sz,FILE_m * file);

/ * legge da" file" una linea di al massimo sz-1 chars

/ *(oveszèlasize di buf)

/ * e la mette nel buffer buf la termina con'' \\ 0''

/ * se errori di parametro ritorna 0 CF = 0

/ * se i caratteri della linea

/ * eccedono i sz-1 chars ritorna - (lunghezza

/ * della stringa)e continua a leggere dal file fino a che trova''\ n''

/ * altrimenti ritorna la lunghezza della stringa

/ * se incontra EOF CF = 1 altrimenti CF = 0

/ * s = 0k,4k,8j,12r,16c,20b,24ra, 28P_buf,32P_siz,36P_file

getl_m:

push ebx

push ecx

push edx

push edi

push ebp

push ebp

%定义@buf [esp + 28]

%define @sz [esp + 32]

%定义@file [esp + 36]

mov ebx,@ file

mov ebp, @sz

mov edi,@ buf

xor eax,eax

cmp ebp,0

jle .c0

mov [esp],ebx

cmp edi,0

je .c0

cmp ebp,1

je .c4

mov byte [edi],0; / k = 2; --k = 1

cmp ebx,0

je .c0

jmp short .c3

.. c0:

clc

jmp .c7

..c2:

mov eax,edi

mov byte [edi],0

sub eax,@ build

stc

jmp .c7

..b0:

inc edi

..c3:

dec dword [ebx]

jl .a0

mov edx,[ebx + 4]

mov al,[edx]

inc edx

mov [ebx + 4],edx

jmp short .a1

..a0:

call __fillbuf_m

cmp eax,-1

je .c2

..a1:

mov [edi],al

dec ebp

jz .c4

cmp al,10

jne .b0


inc edi

mov eax,edi

mov byte [edi],0

sub eax,@ build

clc

jmp短.c7

..c4:

mov byte [edi],0

..c5:

dec dword [ebx]

jl .a2

mov edx,[ebx + 4]

mov al,[edx]

inc edx

mov [ebx +4],edx

jmp短.a3

..a2:

调用__fillbuf_m

cmp eax, -1

je .c6

..a3:; / arriva fino a''\ n''

cmp al,10 < br $>
jne .c5


mov eax,@ build; / risposta negativa

sub eax,edi

clc

jmp短.c7

..c6:

mov eax,@ buf

sub eax, edi

stc

..c7:

%undef @buf

%undef @sz

%undef @file

pop ebp

pop ebp

pop edi

pop edx

pop ecx

pop ebx

ret 12

/ * int cf(void);

_cf:a = 0;一个++ = 0;返回

getl_m:

< b,c,r,j,k,k

<< @ buf = [s + 28],@ sz = [s + 32],@ file = [s + 36]

b = @ file; K = @ SZ; J = @ BUF; a ^ = a;

k< = 0?#。c0; * S = B; Ĵ== 0#.c0; k == 1#.c4;

B * j = 0; b == 0#.c0; #≥C3; // k = 2; --k = 1

..c0:clc; ##。c7;

..c2:a = j; B * J = 0;一个 - = @ BUF; STC; ##。c7;

..b0:{++ j;

..c3: - D [b]; !>?=#A0 | R = [B + 4]; AL = * R; ++ R; [b + 4] = r;#。a1;

..a0:__ fillbuf_m(); a == - 1#.c2;

..a1:* j = al; --k#C4!。 al!= 10#.b0;

}

++ j;一个= j的; B * J = 0;一个 - = @ BUF; CLC; #.c7;

..c4:B * j = 0;

..c5:{ - D [b]; !>?=#A2 | R = [B + 4]; AL = * R; ++ R; [b + 4] = r;#。a3;

..a2:__ fillbuf_m(); a == - 1#.c6;

..a3:al!= 10#.c5; // arriva fino a''\ n''

}

a = @ buf; A- = j的; CLC; #.c7; // risposta negativa

..c6:a = @ buf; A- = j的; stc;

..c7:


Careful thought library functions are important
i think that for tame (domare) the input stream are useful
function like these i use.
i don''t know if they are right

Note: when ask input: is need a range for validate that
(for at last integers, float and double)

; int cf(void);
_cf:
mov eax, 0
adc eax, 0
ret

/* int __stdcall getl_m(void* buf, int sz, FILE_m* file);
/* legge da "file" una linea di al massimo sz-1 chars
/* (ove sz è la size di buf)
/* e la mette nel buffer buf la termina con ''\0''
/* se errori di parametro ritorna 0 CF=0
/* se i caratteri della linea
/* eccedono i sz-1 chars ritorna -(lunghezza
/* della stringa) e continua a leggere dal file fino a che trova ''\n''
/* altrimenti ritorna la lunghezza della stringa
/* se incontra EOF CF=1 altrimenti CF=0
/* s= 0k, 4k, 8j, 12r, 16c, 20b, 24ra, 28P_buf, 32P_siz, 36P_file
getl_m:
push ebx
push ecx
push edx
push edi
push ebp
push ebp
%define @buf [esp+28]
%define @sz [esp+32]
%define @file [esp+36]
mov ebx, @file
mov ebp, @sz
mov edi, @buf
xor eax, eax
cmp ebp, 0
jle .c0
mov [esp], ebx
cmp edi, 0
je .c0
cmp ebp, 1
je .c4
mov byte[edi], 0 ;/ k=2; --k=1
cmp ebx, 0
je .c0
jmp short .c3
..c0:
clc
jmp .c7
..c2:
mov eax, edi
mov byte[edi], 0
sub eax, @buf
stc
jmp .c7
..b0:
inc edi
..c3:
dec dword[ebx]
jl .a0
mov edx, [ebx+4]
mov al, [edx]
inc edx
mov [ebx+4], edx
jmp short .a1
..a0:
call __fillbuf_m
cmp eax, -1
je .c2
..a1:
mov [edi], al
dec ebp
jz .c4
cmp al, 10
jne .b0

inc edi
mov eax, edi
mov byte[edi], 0
sub eax, @buf
clc
jmp short .c7
..c4:
mov byte[edi], 0
..c5:
dec dword[ebx]
jl .a2
mov edx, [ebx+4]
mov al, [edx]
inc edx
mov [ebx+4], edx
jmp short .a3
..a2:
call __fillbuf_m
cmp eax, -1
je .c6
..a3: ;/ arriva fino a ''\n''
cmp al, 10
jne .c5

mov eax, @buf ;/ risposta negativa
sub eax, edi
clc
jmp short .c7
..c6:
mov eax, @buf
sub eax, edi
stc
..c7:
%undef @buf
%undef @sz
%undef @file
pop ebp
pop ebp
pop edi
pop edx
pop ecx
pop ebx
ret 12
/* int cf(void);
_cf: a=0; a++=0; ret
getl_m:
< b, c, r, j, k, k
<< @buf=[s+28], @sz=[s+32], @file=[s+36]
b=@file; k=@sz; j=@buf; a^=a;
k<=0?#.c0; *s=b; j==0#.c0; k==1#.c4;
B*j=0; b==0#.c0; #.c3; // k=2; --k=1
..c0: clc; ##.c7;
..c2: a=j; B*j=0; a-=@buf; stc; ##.c7;
..b0: { ++j;
..c3: --D[b]; !>=?#.a0| r=[b+4]; al=*r; ++r; [b+4]=r;#.a1;
..a0: __fillbuf_m(); a==-1#.c2;
..a1: *j=al; --k!#.c4; al!=10#.b0;
}
++j; a=j; B*j=0; a-=@buf; clc; #.c7;
..c4: B*j=0;
..c5: {--D[b]; !>=?#.a2| r=[b+4]; al=*r; ++r; [b+4]=r;#.a3;
..a2: __fillbuf_m(); a==-1#.c6;
..a3: al!=10#.c5; // arriva fino a ''\n''
}
a=@buf; a-=j; clc; #.c7; // risposta negativa
..c6: a=@buf; a-=j; stc;
..c7:


> @buf,@ sz,@ file
> @buf, @sz, @file



b,c,r,j,k,k

b, c, r, j, k, k



ret 12

// se ritorna 1 = valore preso in val

// altrimenti valore non preso

int

get_double(double * val,double min,double max,FILE_m * pf)

{char a [512];

int k,i = 0,cf1;

la0:;

k = getl_m(a,512,pf); cf1 = cf();

if(k == 0){if(cf1 == 1)

{laa:;的printf(QUOT; \\\
");返回0;}

printf(Errore linea troppo lunga); goto la2;

}

if((k = sscanf_m(a,"%f",val))!= 1)

if(cf1 == 1)goto laa;

if(k!= 1 || * val< min || * val> max)

{la1:;

printf(Errore o importo fuori range);

la2:;

if(++ i> = 3)goto laa;

printf(":Riprova");

goto la0;

}

返回1; < br $>
}


int

get_int(int * val,int min,int max,FILE_m * pf)

{char a [512];

int k,i = 0,cf1;


la0:;

k = getl_m(a,512,pf); cf1 = cf();

if(k == 0){if(cf1 == 1)

{laa:;的printf(QUOT; \\\
");返回0;}

printf(Errore linea troppo lunga); goto la2;

}

if((k = sscanf_m(a,"%i",val))!= 1)

if(cf1 == 1)goto laa;

if(k!= 1 || * val< min || * val> max)

{la1:;

printf(Errore o importo fuori range);

la2:;

if(++ i> = 3)goto laa;

printf(":Riprova");

goto la0;

}

返回1; < br $>
}


int

get_uns(uns * val,uns min,uns max,FILE_m * pf)

{char a [512];

int k,i = 0,cf1;


la0:;

k = getl_m(a,512,pf); cf1 = cf();

if(k == 0){if(cf1 == 1)

{laa:;的printf(QUOT; \\\
");返回0;}

printf(Errore linea troppo lunga); goto la2;

}

if((k = sscanf_m(a,"%u",val))!= 1)

if(cf1 == 1)goto laa;

if(k!= 1 || * val< min || * val> max)

{la1:;

printf(Errore o importo fuori range);

la2:;

if(++ i> = 3)goto laa;

printf(":Riprova");

goto la0;

}

返回1; < br $>
}

int get_char(char * val,FILE_m * pf)

{char a [512];

int k,i = 0,cf1;


la0:;

k = getl_m(a,512,pf); cf1 = cf();

if(k == 0){if(cf1 == 1)

{laa:;的printf(QUOT; \\\
");返回0;}

printf(Errore linea troppo lunga); goto la2;

}

if((k = sscanf_m(a,"%c",val))!= 1)

if(cf1 == 1)goto laa;

if(k!= 1)

{la1:;

printf(" Errore ");

la2:;

if(++ i> = 3)goto laa;

printf(":Riprova" ;);

转到la0;

}

返回1;

}



// se ritorna 1 = valore preso in val

// altrimenti valore non preso

// fail met stream in non lo stream al al massimo

// ERR对抗EOF

// se il sistema esterno ha lo stream in FAIL

// non continua

int get(num * val,istream& istr)

{int i = 0,c;

num r;


if(istr.f-> flag&(_ERR | _EOF | _FAIL))返回0;

nuova:;

istr> r;

if(istr.f-> flag& _FAIL)

{if(istr.f-> flag&(_ERR | _EOF))返回0;

do {c = fgetc_m(istr.f);} whil e(c!= EOF&& c!=''\ n'');

如果(c == EOF)返回0;

printf(&Errore);

if(++ i> = 3)

{istr.f-> flag& = ~_FAIL;返回0;}

istr.f-> flag& = ~_FAIL;

printf(":Riprova"); goto nuova;

}

* val = r;

do {c = fgetc_m(istr.f);} while(c!= EOF&& c!=''\ n'');

返回1;

}

ret 12
// se ritorna 1=valore preso in val
// altrimenti valore non preso
int
get_double(double* val, double min, double max, FILE_m* pf)
{char a[512];
int k, i=0, cf1;
la0:;
k=getl_m(a, 512, pf); cf1=cf();
if(k==0){if(cf1==1)
{laa:; printf("\n"); return 0;}
printf("Errore linea troppo lunga"); goto la2;
}
if( (k=sscanf_m(a, "%f", val))!= 1 )
if(cf1==1) goto laa;
if(k!=1||*val<min||*val>max)
{la1:;
printf("Errore o importo fuori range");
la2:;
if(++i>=3) goto laa;
printf(": Riprova ");
goto la0;
}
return 1;
}

int
get_int(int* val, int min, int max, FILE_m* pf)
{char a[512];
int k, i=0, cf1;

la0:;
k=getl_m(a, 512, pf); cf1=cf();
if(k==0){if(cf1==1)
{laa:; printf("\n"); return 0;}
printf("Errore linea troppo lunga"); goto la2;
}
if( (k=sscanf_m(a, "%i", val))!=1 )
if(cf1==1) goto laa;
if( k!=1 || *val<min || *val>max)
{la1:;
printf("Errore o importo fuori range");
la2:;
if(++i>=3) goto laa;
printf(": Riprova ");
goto la0;
}
return 1;
}

int
get_uns(uns* val, uns min, uns max, FILE_m* pf)
{char a[512];
int k, i=0, cf1;

la0:;
k=getl_m(a, 512, pf); cf1=cf();
if(k==0){if(cf1==1)
{laa:; printf("\n"); return 0;}
printf("Errore linea troppo lunga"); goto la2;
}
if( (k=sscanf_m(a, "%u", val))!=1 )
if(cf1==1) goto laa;
if( k!=1 || *val<min || *val>max)
{la1:;
printf("Errore o importo fuori range");
la2:;
if(++i>=3) goto laa;
printf(": Riprova ");
goto la0;
}
return 1;
}
int get_char(char* val, FILE_m* pf)
{char a[512];
int k, i=0, cf1;

la0:;
k=getl_m(a, 512, pf); cf1=cf();
if(k==0){if(cf1==1)
{laa:; printf("\n"); return 0;}
printf("Errore linea troppo lunga"); goto la2;
}
if( (k=sscanf_m(a, "%c", val))!=1 )
if(cf1==1) goto laa;
if( k!=1 )
{la1:;
printf("Errore ");
la2:;
if(++i>=3) goto laa;
printf(": Riprova ");
goto la0;
}
return 1;
}


// se ritorna 1=valore preso in val
// altrimenti valore non preso
// non mette in fail lo stream al massimo
// ERR oppure EOF
// se il sistema esterno ha lo stream in FAIL
// non continua
int get(num* val, istream& istr)
{int i=0, c;
num r;

if(istr.f->flag & ( _ERR | _EOF | _FAIL )) return 0;
nuova:;
istr >r;
if( istr.f->flag & _FAIL )
{ if(istr.f->flag & ( _ERR | _EOF) ) return 0;
do{c=fgetc_m(istr.f);}while(c!=EOF && c!=''\n'');
if(c==EOF) return 0;
printf("Errore ");
if(++i>=3)
{istr.f->flag &= ~ _FAIL; return 0;}
istr.f->flag &= ~ _FAIL;
printf(": Riprova "); goto nuova;
}
*val=r;
do{c=fgetc_m(istr.f);}while(c!=EOF && c!=''\n'');
return 1;
}

推荐答案

"?a \\ / b" < al@f.gwrites:
"?a\\/b" <al@f.gwrites:

认真思考库函数很重要

i认为对于tame(domare)输入流是有用的

功能就像我使用的那样。

i不知道他们是对的


注意:当问输入时:是需要一个范围来验证

(最后整数,浮动和双倍)


; int cf(void);

_cf:

mov eax,0

adc eax,0

ret
Careful thought library functions are important
i think that for tame (domare) the input stream are useful
function like these i use.
i don''t know if they are right

Note: when ask input: is need a range for validate that
(for at last integers, float and double)

; int cf(void);
_cf:
mov eax, 0
adc eax, 0
ret



[删除了274行]


你和av< av@ala.a>是同一个人;",也称为

" RoSsIaCrIiLoIA",不是吗?


如果你打算坚持发布这个废话在这里,请至少

有一个简单的礼貌使用一致的名称,所以那些不想b / b $ b $想要阅读它的人可以正确地杀死你。


或者更好的是,停止在comp.lang.c中发布汇编语言。


-

Keith Thompson(The_Other_Keith) ks***@mib.org < http://www.ghoti.net/~kst>

圣地亚哥超级计算机中心< *< http://users.sdsc.edu/~kst>

我们必须做点什么。这是事情。因此,我们必须这样做。

[274 lines deleted]

You''re the same person as "av <av@ala.a>", also known as
"RoSsIaCrIiLoIA", aren''t you?

If you''re going to insist on posting this crap here, please at least
have the simple courtesy to use a consistent name so those who don''t
want to read it can killfile you properly.

Or better yet, stop posting assembly language in comp.lang.c.

--
Keith Thompson (The_Other_Keith) ks***@mib.org <http://www.ghoti.net/~kst>
San Diego Supercomputer Center <* <http://users.sdsc.edu/~kst>
We must do something. This is something. Therefore, we must do this.


2006年9月13日星期三21:06:03 +0200,?a \ / / b写道:

On Wed, 13 Sep 2006 21:06:03 +0200, ?a\/b wrote:


> int
get_double(double * val,double min,double max,FILE_m * pf)
{char a [512];

int k,i = 0,cf1;
la0:;

k = getl_m(a,512,pf); cf1 = cf();

if(k == 0){if(cf1 == 1)
>int
get_double(double* val, double min, double max, FILE_m* pf)
{char a[512];
int k, i=0, cf1;
la0:;
k=getl_m(a, 512, pf); cf1=cf();
if(k==0){if(cf1==1)



或许更好

if(k <= 0)

与其他人相同

perhaps better
if(k<=0)
the same for others


{laa:;的printf(QUOT; \\\
");返回0;}

printf(Errore linea troppo lunga); goto la2;

}
{laa:; printf("\n"); return 0;}
printf("Errore linea troppo lunga"); goto la2;
}



2006年9月13日星期三19:53:13 GMT,Keith Thompson写道:
On Wed, 13 Sep 2006 19:53:13 GMT, Keith Thompson wrote:

>"?a\\ / b" < al@f.gwrites:
>"?a\\/b" <al@f.gwrites:

>认真思考库函数很重要
我认为对于tame(domare)输入流是有用的<我喜欢这些功能。
我不知道他们是不对的

注意:当询问输入时:需要一个范围来验证
(对于最后整数,浮动和双倍)

; int cf(void);
_cf:
mov eax,0
adc eax,0
ret
>Careful thought library functions are important
i think that for tame (domare) the input stream are useful
function like these i use.
i don''t know if they are right

Note: when ask input: is need a range for validate that
(for at last integers, float and double)

; int cf(void);
_cf:
mov eax, 0
adc eax, 0
ret


[已删除274行]

你和av< av@ala.a>同名,也被称为RoSsIaCrIiLoIA,不是吗?

如果你要坚持在这里发布这个废话,

[274 lines deleted]

You''re the same person as "av <av@ala.a>", also known as
"RoSsIaCrIiLoIA", aren''t you?

If you''re going to insist on posting this crap here,



它不是垃圾

it is not "crap"


>请至少
有一个简单的礼貌使用一致的名称,所以那些不想读它的人可以正确地杀死你。
>please at least
have the simple courtesy to use a consistent name so those who don''t
want to read it can killfile you properly.



如果你不想读:不读......

if you don''t like to read: don''t read ...


>或者更好的是,停止在comp.lang.c中发布汇编语言。
>Or better yet, stop posting assembly language in comp.lang.c.


这篇关于C语言缺少键盘输入功能的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆