本文是对scanf函数的一个小补充。
重点介绍一个占位符 %[]
#include<stdio.h> #include<string.h> int zm = 0; int shuz = 0; int kg = 0; int qita = 0; void StatCharCount(char str[]) { zm = 0; shuz = 0; kg = 0; qita = 0; int i = 0; while(1) { if (str[i]=='\0') { return; } else if (str[i] >= 'A' && str[i] <= 'Z' || str[i] >= 'a' && str[i] <= 'z') { zm++; } else if (str[i] >= '0' && str[i] <= '9') { shuz++; } else if (str[i] == ' ') { kg++; } else { qita++; } i++; } } int main() { char arr[1000] = { " " }; scanf("%[^\n]", &arr); StatCharCount(arr); printf("字母是:%d 数字是:%d 空格:%d 其他字符%d\n", zm, shuz, kg, qita); return 0; }
[]内的参数,例如上面的^\n,意味着除非碰到换行符,否则,scanf会一直读取输入的内容。
若写成\n,则意味着只有换行符会被读取,其他符号一旦输入,scanf函数就会结束读取。
事实上,许多地方,我们都需要运行多次scanf函数。scanf函数的运行是对缓存区进行读取,我们平时在cmd中输入的内容会存入缓存区,然后由scanf函数读取。但有时候当我们输入了一个换行符后,scanf函数结束了读取,但是换行符本身还会残留在缓存区,所以下次的scanf函数很可能会先读取换行符再读取后面的内容。
因此可以使用
getchar();
通过这个函数,可以读取缓存区的第一个字符,之后再使用scanf函数就可以避免读取到上一个scanf的回车了。