今日题目:
看到本题目时我注意到的关键词为循环,随即想到C语言中的三个循环(for;while;do while)。对此,我的代码如下:
#include <stdio.h>
int main()
{
int a,i=0;
scanf("%d",&a);//输入线段长度
while(i<a)
{
printf("*");
i++;
}//输出与长度相同个数的字符
return 0;
}
运行结果如下:
输出结果看似没有问题符合逻辑,然而该代码却并没有满足题目的需求。再次读题我注意到输入描述中的“多组输入”,结合老师所编写的正确的代码与示例我才明白自己错在哪里。
以下是正确的代码:
#include <stdio.h>
int main()
{
int n=0;
while(scanf("%d",&n)!=EOF)//输入的长度有效
{
int i=0;
for(i=0;i<n;i++)
{
printf("*");
}//输出与长度相同个数的字符
printf("\n");//换行继续输入
}
return 0;
}
运行结果如下:
此代码对于“多组输入”的满足在于将输入scanf函数放到了while循环的表达式中,每次执行循环体便会先判断表达式是否成立,并且在每执行完一次之后进行换行,从而实现多次输入。而对于表达式scanf("%d",&n)!=EOF这句代码我的理解是保证输入有效,EOF为-1。对此我又进行了以下几组测试:
发现并不能输出任何字符。起初我疑惑为什么仅仅是不等于-1就能让其他不符合条件的输入无效,再读代码发现是while循环体内嵌套的for循环起到了作用。若输入满足while循环的表达式但为0或其他负数,for循环中的表达式2(i<n)便无法满足,因此不会进入到for循环从而直接输出换行了。
那么现在回过头来在看while循环的表达式,我认为其目的应该更多的是为了实现多组输入。
千里之行,始于足下。以上便是今日一道C语言题目引发的些许思考,如有知识错误的地方还请各位指正。