io - difference between scanf("%c" , ..) and getchar() -
i think scanf("%c" , &addr);
equal getchar()
before test this:
#include<stdio.h> int main() { int i; scanf("%c",&i); printf("%d\n", i); if(i == eof) printf("eof int type , char input\n"); =getchar(); printf("%d\n", i); if(i == eof) printf("eof int type , char input\n"); }
i got output when use "ctrl+d" twice:
-1217114112
-1
eof int type , char input
since eof -1
in int
type ,i try use scanf("%d",&i);
replace scanf("%c",&i)
, same output.
i got confused. can explain me?
----------------------------------edit-----------------------------------------------
i want know behavior of scanf("%c",i)
of ctrl+d , test:
#include<stdio.h> int main() { int i; int j; j = scanf("%c",&i); printf("%c\n", i); printf("%d\n", j); if(i == eof) printf("eof int type , char input"); =getchar(); printf("%d\n", i); if(i == eof) printf("eof int type , char input"); }
output:
k // if scanf set 1 byte in , why here print 'k' ? -1 -1 eof int type , char input
your comparison not set i
involves undefined behavior (ub).
int i; // value of scanf("%c",&i); // @ most, 1 byte of set, remaining bytes still unknown. printf("%d\n", i);// printing 'i' value not determined.
had tried
char ch; int y = scanf("%c",&ch); printf("%d\n", ch); if(ch == eof)
you potentially make match though input not eof. had scanned in char
value of 255, char take on 2s compliment 8-bit value of -1. comparison sign extend 8-bit -1 match int
size , match -1.
(assumptions: 2s compliment integers, 8-bit byte, eof == -1, char signed).
the correct eof test is
int y = scanf("%c",&ch); if (y == eof)
note: getchar()
& scanf()
return eof
implies end-of-file or i/o error. subsequent check of ferror(stdin)
distinguishes this.
Comments
Post a Comment