69,371
社区成员
发帖
与我相关
我的任务
分享
#include<stdio.h>
main(){
char a;
scanf_s("%c", &a);
while (a!= '@')
{
scanf_s("%c", &a);
printf("kek ");
}
printf("oo ");
}
char c;
scanf_s("%c", &c, 1); // 思考题:为什么不用sizeof?
诶,这段代码没看懂,为什么啊?[/quote]
本意是为了“吃”掉换行,和在之后加fflush(stdin)的做法类似(但fflush“吃”得更多)。
然而这“都”字散发着浓郁的经验主义(教条主义)的气息。
//请今后要用
char c;
scanf("%c",&c);
//时,都改为
char s[2];
char c;
scanf("%1s",s);
c=s[0];
不要使用
while (条件)
更不要使用
while (组合条件)
要使用
while (1) {
if (条件1) break;
//...
if (条件2) continue;
//...
if (条件3) return;
//...
}
因为前两种写法在语言表达意思的层面上有二义性,只有第三种才忠实反映了程序流的实际情况。
典型如:
下面两段的语义都是当文件未结束时读字符
while (!feof(f)) {
a=fgetc(f);
//...
b=fgetc(f);//可能此时已经feof了!
//...
}
而这样写就没有问题:
while (1) {
a=fgetc(f);
if (feof(f)) break;
//...
b=fgetc(f);
if (feof(f)) break;
//...
}
类似的例子还可以举很多。
#include<stdio.h>
#include<stdlib.h>
main(){
char a;
scanf_s("%c", &a);
fflush(stdin);
while (a!= '@')
{
printf("请重新输入: ");
scanf_s("%c", &a);
fflush(stdin);
printf("kek ");
}
printf("oo ");
}
#include<stdio.h>
int main()
{
char a;
scanf_s("%c", &a);
getchar();
while (a != '@')
{
scanf_s("%c", &a);
getchar();
printf("kek ");
}
printf("oo ");
}
while判断条件是输入@字符才能退出循环;
另外,为了避免多次循环,加一句getchar