K面scanf
/**P1 : when we get numbers, \t \n ... is useless*/
/**P2 : when we get strings*/
char str1[100] , str2[100] , str3[100] ;
/**第一种接收*/
scanf( "%s" , str1 ) ;scanf( "%s" , str2 ) ;
scanf( "%s" , str3 ) ;
/**第二种也是一样的*/
scanf( "%s%s%s" , str1 , str2 , str3 ) ;
printf( "the str\n1:%s\n2:%s\n3:%s\n", str1 , str2 , str3 ) ;
/**
INPUT:
you will get
or
fjsdg
frg fdjigt
OUTPUT:
the str
1:you
2:will
3:get
or
the str
1:fjsdg
2:frg
3:fdjigt
*/
也就是说,scanf对于空格神马的是真心不敏感...如果你要输入一个有空格的句子,我觉着fgets会比较好,对于一整行的读入,fgets会读入最后一个空格,你要是不要他,记得置为 ‘\0’.
/**P3 : when get numbers + string*/
int num1 , num2 , num3 ;
//scanf("%d%d" , &num1 , &num2 ) ;
scanf("%d",&num3);
//getchar();有没有无影响
scanf( "%s" , str1 ) ;
printf("num1=%d , num2=%d\n" , num1 , num2) ;
printf( "the str1 :%s\n" , str1 ) ;
/**
INPUT:45 6
45
get?
OUTPUT:
num1=45 , num2=6
the str1 :get?
*/
/**P4 : when we get numbers and char*/
/**第一种scanf char*/
int num1 , num2 , num3 ;
char ch1 , ch2 , ch3 ;
scanf( "%d%d" , &num1 , &num2 ) ;
scanf( "%c%c%c" , &ch1 , &ch2 ,&ch3 ) ;
printf("num1=%d , num2=%d\n" , num1 , num2 ) ;
printf( "the ch1 :%c\n" , ch1 ) ;
printf( "the ch2 :%c\n" , ch2 ) ;
printf( "the ch3 :%c\n" , ch3 ) ;
/**
INPUT:
45 45
a b c
num1=45 , num2=45
the ch1 :
the ch2 :a
the ch3 :
*/
也就是说,对于char型而言,它接收了最后一个%d后面的空格,所以平常涉及到这两个,我们要么在%d后面+%*c 要么直接加个getchar();
/**第二种scanf char*/
scanf( "%c %c %c" , &ch1 , &ch2 ,&ch3 ) ;
上述可以得到的结果为:
/**
INPUT:
45 45
a b c
num1=45 , num2=45
the ch1 :
the ch2 :a
the ch3 :b
*/
SO,scanf的空格和空行会对char的get产生影响...