1.清除缓存区的几种方法
(1)在每次输入之后添加getchar();读取\n;清理的原因在于在你每次输入之后都要按一个enter键,而计算机会把enter键这个操作也转化为一个字符
//针对每组输入,输出为一行,如果输入字母是元音(包括大小写),输出“Vowel”,如果输入字母是非元音,输出“Consonant” int main() { char i; while (scanf("%c", &i) == 1) //while (scanf("%c", &i) != EOF)这两个写法是等价的 { if (i == 'A' || i == 'a' || i == 'E' || i == 'e' || i == 'I' || i == 'i' || i == 'O' || i == 'o' || i == 'U' || i == 'u') printf("Vowel\n"); else printf("Consonant\n"); getchar();//注意清理缓冲区 } return 0; }
(2)使用continue跳过‘\n’
int main() { char i; while (scanf("%c", &i) == 1) //while (scanf("%c", &i) != EOF)这两个写法是等价的 { if (i == '\n') continue;//遇到\n就跳过 if (i == 'A' || i == 'a' || i == 'E' || i == 'e' || i == 'I' || i == 'i' || i == 'O' || i == 'o' || i == 'U' || i == 'u') printf("Vowel\n"); else printf("Consonant\n"); } return 0; }
2.字母大小写转换
.通过大小写字母之间的差值(32)来进行转换
.通过库函数toupper(变为大写),tolower(变为小写)进行转换
注意:作者刚开始想使用strupr,和strlwr进行转换,但这两个函数针对的是字符串,且接受的参数为指针变量,也就是要传递的是地址,对于字符串来说,直接在()加入定义数组的数组名即可
KiKi想完成字母大小写转换,有一个字符,判断它是否为大写字母,如果是,将它转换成小写字母;反之则转换为大写字母 多组输入 通过加减 int main() { 定义输入 char i; while (scanf("%c", &i) == 1) { if (i >= 'A' && i <= 'Z') printf("%c\n", i + 32); if (i >= 'a' && i <= 'z') printf("%c\n", i - 32); getchar(); } return 0; } 通过函数 使用库函数 int main() { 定义输入 char i; while (scanf("%c", &i) == 1) { if (i >= 'A' && i <= 'Z') printf("%c\n", tolower(i)); if (i >= 'a' && i <= 'z') printf("%c\n", toupper(i)); getchar(); } return 0; }
3.一元二次方程解的输出
#include <stdio.h> #include <math.h> //一元二次方程ax2 + bx + c = 0的根 int main() { float a, b, c; //多组输入输入三个数 while (scanf("%f %f %f", &a, &b, &c) != EOF) { int gen = b * b - 4 * a * c; if (0 == a) printf("Not quadratic equation\n"); else if (a != 0) { if (gen == 0) { if (b == 0) printf("x1=x2=0.00\n"); else printf("x1=x2=%.2f\n", -b / (2 * a)); } else if (gen > 0) printf("x1=%.2f;x2=%.2f\n", (((-b) - sqrt(gen)) / (2 * a)), (((-b) + sqrt(gen)) / (2 * a))); else { printf("x1=%.2f-%.2fi;x2=%.2f+%.2fi\n", -b / (2 * a), sqrt(-gen) / (2 * a), -b / (2 * a), sqrt(-gen) / (2 * a)); } } } return 0; }