练习 1: 只用 getchar 函数读入一个整数。假设它占据单独的一行,读到行末为止,包括换行符。输入保证读入的整数可以保存在 int 中。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 #include  <stdio.h>  int  input_int (void ) ;int  main (void ) { 	int  n; 	n = input_int(); 	printf ("%d\n" , n); 	return  0 ; } int  input_int (void ) { 	int  n = 0 , c; 	for  (c = getchar(); c!='\n'  && c!=EOF; c=getchar()) { 		n *= 10 ; 		n += c - '0' ; 	} 	return  n; } 
练习 2: 只用 fgets 函数读入一个整数。假设它占据单独的一行,读到行末为止,包括换行符。输入保证读入的整数可以保存在 int 中。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 #include  <stdio.h>  int  input_int (FILE * fp) ;int  main (void ) {     int  n;     n = input_int(stdin );     printf ("%d\n" , n);     return  0 ; } int  input_int (FILE * fp) {     char  buf[20 ];     int  n = 0 , i;     fgets(buf, 20 , fp);     for  (i = 0 ; buf[i] != '\n' ; i++) {         n *= 10 ;         n += buf[i] - '0' ;     }     return  n; } 
练习 3: 只用 getchar 实现 fgets 的功能,即用每次一个字符的方式读取整行。
注:未实现 fgets 的第 3 个参数,直接从标准输入读入。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 #include  <stdio.h>  void  my_fgets (char  * buf, int  maxn) ;int  main (void ) { 	char  s[100 ]; 	my_fgets(s, 100 ); 	printf ("%s" , s); 	return  0 ; } void  my_fgets (char  * buf, int  maxn) { 	int  i = 0 , c; 	for  (c=getchar(); c!='\n'  && c!=EOF && i<(maxn-2 ); c=getchar()) 		buf[i++] = (char ) c; 	buf[i++] = '\n' ; buf[i] = '\0' ;  } 
练习 4: 实现 strchr 的功能,即在一个字符串中查找一个字符。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 #include  <stdio.h>  char  * my_strchr (char  * s, char  c) ;int  main (void ) { 	char  string [] = "this is a string.\0" ; 	char  * cp = my_strchr(string , 'a' ); 	if  (cp == NULL ) 		printf ("Not found!\n" ); 	else  		printf ("%s\n" , cp); 	return  0 ; } char  * my_strchr (char  * s, char  c) { 	char  * cp = NULL ; 	int  i; 	 	for (i = 0 ; s[i] != '\0' ; i++) if  (s[i] == c) { 		cp = &s[i]; 		break ; 	} 	return  cp; } 
练习 5: 实现 isalpha 和 isdigit 的功能,即判断字符是否为字母/数字。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 #include  <stdio.h>  int  my_isalpha (char  c) ;int  my_isdigit (char  c) ;int  main (void ) { 	char  c = 'w' ; 	my_isalpha(c) ? 		printf ("%c is alpha.\n" , c) : 		printf ("%c is not alpha.\n" , c); 	my_isdigit(c) ? 		printf ("%c is digit.\n" , c) : 		printf ("%c is not digit.\n" , c); 	return  0 ; } int  my_isalpha (char  c) { 	return  ('A' <=c && c<='Z' )||('a' <=c && c<='z' ); } int  my_isdigit (char  c) { 	return  '0' <=c && c<='9' ; }