scanf函数的问题
#include "stdio.h"#include<stdlib.h>
int main()
{
int n, a;
int i, j, flag, std, sum = 0;
scanf("%d", &n);
for (i = 0; i < n; i++)
scanf("%d", &a);
scanf("%d", &std);
for (i = 0; i < n; i++)
if (a >= std)
{
flag = 1;
for (j = 2; j < a; j++)
if (a % j == 0)
{
flag = 0;
break;
}
if (flag) sum += a;
}
printf("%d", sum);
system("pause");
return 0;
}
我在终端直接输入
4 2 3 4 5
4
就可以跳出结果,但是代码里有三个scanf函数,为什么第一个scanf的输入被跳过了。
本帖最后由 jackz007 于 2022-12-8 22:35 编辑
没有被跳过,你输入的是:
4
2 3 4 5
4
3 行键盘输入分别对应了 3 个 scanf()
结果打印出数字 5, 就是正确答案。
编译运行实况:
D:\\C>g++ -o x x.c
D:\\C>x
4 2 3 4 5
4
5
请按任意键继续. . . 你输入的第一个4,就是赋给了n, 后面的2,3,4,5是分别赋值给了a, a, a, a, 最后一个4是赋值给了std.scanf输入可以以空格表示一次结束 这个程序是干啥的 本帖最后由 铭凡 于 2022-12-8 22:45 编辑
同问!
我的分析如下,理论输出5,但是输出的是15
#include "stdio.h"
#include<stdlib.h>
int main()
{
int n, a;
int i, j, flag, std, sum = 0;
scanf("%d", &n);//第一次输入4,此时n==4;
for (i = 0; i < n; i++)//循环4次;
{
scanf("%d", &a);//输入2 3 4 5,数组a={2, 3, 4, 5} ;
}//该语句执行之后,i的值是4;
scanf("%d", &std);//输入4 ,std==4;
for (i = 0; i < n; i++)//i=0和1的时候,下面if语句不成立,i=2进入if语句; 这时候i=3了;
{
if (a >= std)//判断2 3 4 5中哪个数大于等于std==4,i=2进入if语句;
{
flag = 1;//对flag进行初始化,此时i==2;此时i==3
for (j = 2; j < a; j++)//a==4;a == 5;
{
if (a % j == 0)//4 % 2 ==0, 跳出for循环 (注意是最里层的for循环);5%2 != 0,不执行
{
flag = 0;
break;
}
if (flag)//;执行这个;
{
sum += a;//;第二次的5%2!=0,所以跑到这里来了, 此时sum == 5
}
}
}
}
printf("%d", sum);//按照这个道理,输出的sum行该是5啊emm
system("pause");
return 0;
}
jackz007 发表于 2022-12-8 22:31
没有被跳过,你输入的是:
3 行键盘输入分别对应了 3 个 scanf()
为啥我输出的是15啊555 本帖最后由 jackz007 于 2022-12-8 23:32 编辑
铭凡 发表于 2022-12-8 22:46
为啥我输出的是15啊555
不可能是 15,我用 tdm-gcc 5.1.0 和 VC9 分别编译的版本结果都是 5,你自己好好查查,是不是改别人的代码了,我是在坚决不改的情况下得到 5 的。
我提示一下你,5 + 5 + 5 = 15,检查一下你的判断素数的位置,是不是在 j 循环以内(j == 2 、j == 3、j == 5 的时候各加了一次 a[ i ] = 5)??? 本帖最后由 铭凡 于 2022-12-8 23:35 编辑
jackz007 发表于 2022-12-8 23:19
不可能是 15,我用 tdm-gcc 5.1.0 和 VC9 分别编译的版本结果都是 5,你自己好好查查,是不是 ...
你看下5楼的那个代码,我用的是这个,源代码是5,应该是我打了几个{}的问题 铭凡 发表于 2022-12-8 23:34
你看下5楼的那个代码,我用的是这个,源代码是5,应该是我打了几个{}的问题
不需要仔细看,你的 if(flag) 显然在循环内!!! 本帖最后由 铭凡 于 2022-12-9 00:52 编辑
jackz007 发表于 2022-12-8 23:43
不需要仔细看,你的 if(flag) 显然在循环内!!!
明白了,谢谢
这东西真得多交流,自己看程序的时候,很多时候就想当然地给它们放一起了。刚才我还想反驳你,打了一大堆话,打到最后发现,我去,想明白了哈哈
页:
[1]