鱼C论坛

 找回密码
 立即注册
查看: 2460|回复: 9

[已解决]scanf函数的问题

[复制链接]
发表于 2022-12-8 22:04:24 | 显示全部楼层 |阅读模式
60鱼币
#include "stdio.h"
#include<stdlib.h>
int main()
{
        int n, a[20];
        int i, j, flag, std, sum = 0;
        scanf("%d", &n);
        for (i = 0; i < n; i++)
                scanf("%d", &a[i]);
        scanf("%d", &std);
        for (i = 0; i < n; i++)
                if (a[i] >= std)
                {
                        flag = 1;
                        for (j = 2; j < a[i]; j++)
                                if (a[i] % j == 0)
                                {
                                        flag = 0;
                                        break;
                                }
                        if (flag) sum += a[i];
                }
        
        printf("%d", sum);
    system("pause");
        return 0;
}
我在终端直接输入
4 2 3 4 5
4
就可以跳出结果,但是代码里有三个scanf函数,为什么第一个scanf的输入被跳过了。
最佳答案
2022-12-8 22:04:25
本帖最后由 jackz007 于 2022-12-8 22:35 编辑

        没有被跳过,你输入的是:
4
2 3 4 5
4
        3 行键盘输入分别对应了 3 个 scanf()
        结果打印出数字 5, 就是正确答案。
        编译运行实况:
D:\[00.Exerciese.2022]\C>g++ -o x x.c

D:\[00.Exerciese.2022]\C>x
4 2 3 4 5
4
5
请按任意键继续. . .

最佳答案

查看完整内容

没有被跳过,你输入的是: 3 行键盘输入分别对应了 3 个 scanf() 结果打印出数字 5, 就是正确答案。 编译运行实况:
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-12-8 22:04:25 | 显示全部楼层    本楼为最佳答案   
本帖最后由 jackz007 于 2022-12-8 22:35 编辑

        没有被跳过,你输入的是:
4
2 3 4 5
4
        3 行键盘输入分别对应了 3 个 scanf()
        结果打印出数字 5, 就是正确答案。
        编译运行实况:
D:\[00.Exerciese.2022]\C>g++ -o x x.c

D:\[00.Exerciese.2022]\C>x
4 2 3 4 5
4
5
请按任意键继续. . .
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-12-8 22:35:45 | 显示全部楼层
你输入的第一个4,就是赋给了n, 后面的2,3,4,5是分别赋值给了a[0], a[1], a[2], a[3], 最后一个4是赋值给了std.scanf输入可以以空格表示一次结束
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-12-8 22:35:45 | 显示全部楼层
这个程序是干啥的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-12-8 22:37:11 | 显示全部楼层
本帖最后由 铭凡 于 2022-12-8 22:45 编辑

同问!

我的分析如下,理论输出5,但是输出的是15
#include "stdio.h"
#include<stdlib.h>
int main()
{
    int n, a[20];
    int i, j, flag, std, sum = 0;
    scanf("%d", &n);  //第一次输入4,此时n==4;
    for (i = 0; i < n; i++)  //循环4次;
    {
        scanf("%d", &a[i]);  //输入2 3 4 5,数组a[4]={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[i] >= std)  //判断2 3 4 5中哪个数大于等于std==4,i=2进入if语句;
        {
            flag = 1;  //对flag进行初始化,此时i==2;此时i==3
            for (j = 2; j < a[i]; j++)  //a[i==2]==4;a[i == 3] == 5;
            {
                if (a[i] % j == 0)  //4 % 2 ==0, 跳出for循环 (注意是最里层的for循环);5%2 != 0,不执行
                {
                    flag = 0;
                    break;
                }
                if (flag)  //;执行这个;
                {
                    sum += a[i];  //;第二次的5%2!=0,所以跑到这里来了, 此时sum == 5
                }
            }
        }
    }
    printf("%d", sum);  //按照这个道理,输出的sum行该是5啊emm
    system("pause");
    return 0;
}

QQ截图20221208224526.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-12-8 22:46:31 | 显示全部楼层
jackz007 发表于 2022-12-8 22:31
没有被跳过,你输入的是:

        3 行键盘输入分别对应了 3 个 scanf()

为啥我输出的是15啊555
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-12-8 23:19:33 | 显示全部楼层
本帖最后由 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)???
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-12-8 23:34:03 | 显示全部楼层
本帖最后由 铭凡 于 2022-12-8 23:35 编辑
jackz007 发表于 2022-12-8 23:19
不可能是 15,我用 tdm-gcc 5.1.0 和 VC9 分别编译的版本结果都是 5,你自己好好查查,是不是 ...


你看下5楼的那个代码,我用的是这个,源代码是5,应该是我打了几个{}的问题
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-12-8 23:43:54 | 显示全部楼层
铭凡 发表于 2022-12-8 23:34
你看下5楼的那个代码,我用的是这个,源代码是5,应该是我打了几个{}的问题


          不需要仔细看,你的 if(flag) 显然在循环内!!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-12-9 00:51:01 | 显示全部楼层
本帖最后由 铭凡 于 2022-12-9 00:52 编辑
jackz007 发表于 2022-12-8 23:43
不需要仔细看,你的 if(flag) 显然在循环内!!!


明白了,谢谢

这东西真得多交流,自己看程序的时候,很多时候就想当然地给它们放一起了。刚才我还想反驳你,打了一大堆话,打到最后发现,我去,想明白了哈哈
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-26 08:24

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表