如何使用 scanf 将元素接收到数组中?

Posted

技术标签:

【中文标题】如何使用 scanf 将元素接收到数组中?【英文标题】:How do I receive elements into an array using scanf? 【发布时间】:2022-01-11 23:09:04 【问题描述】:

我正在学习 C 编程,但在使用 scanf 将值初始化到数组中时遇到了问题。 In this example、103220 作为数组的值输入; 20 应该在 grades[2] 中,但它的值是 0

为什么程序不注册最后输入的值?

那是相关代码。

如果能帮助我理解程序出了什么问题,我将不胜感激。

#include <math.h>
#include <stdio.h>
#include <stdbool.h>

#define N 50
#define MaximalSTD 10

int main() 
    printf("Please enter the grades of the examinees");
    printf(" followed by the expected mean\n");
    double grades[N], ReqMean; 
    int numgrade = 0;
    for (int i = 0; i < N; i++) 
        if (scanf("%lf", &grades[i]) == 1) 
            numgrade++;
         else
            break;
    
    ReqMean = grades[numgrade - 1];
    printf("numgrade: %d\nReqMean: %d\n", numgrade, ReqMean);
    return 0;

【问题讨论】:

你的“scanf”对我来说看起来很合理,但为了确定,不是直接扫描到数组元素,而是扫描到局部变量“temp”,然后将 temp 分配给“grades[ i]"。 N 的值是多少?检查来自scanf() 的返回值很好,但最好检查是否获得了正确数量的值——if (scanf("%lf", &amp;grades[i]) == 1)。那是因为scanf() 也可以返回EOF,它也不为零,并且会导致您的代码不必要地循环。循环上的计数器可以防止过多的损坏,但最好是精确的。 感谢您的提示马克,我已经尝试过您的方法,但没有一个值已初始化。 link @JonathanLeffler 乔纳森您好,N 的值为 50(上面写为 #define N 50)我已经尝试过" if (scanf("%lf", &grades[i]) = = 1)”并且我确实得到了正确数量的值(可以在“numgrade”中看到)但第三个值仍然是 0。(请注意,我必须为程序实际运行编写一个无效字符)@987654323 @ 我们需要查看示例数据。阅读有关如何创建 MCVE(Minimal, Complete, Verifiable Example — 或 MRE 或 SO 现在使用的任何名称)或 SSCCE(Short, Self-Contained, Correct Example)的信息将是一个好主意 — 以不同的名称创建相同的想法。你首先得到的是正确的——但添加所有代码实际上并不是一个证明。 【参考方案1】:
printf("numgrade: %d\nReqMean: %d\n" , numgrade,ReqMean);

您对双精度值(本例中为 ReqMean) 使用了错误的格式说明符。 试试吧。

printf("numgrade: %d\nReqMean: %lf\n" , numgrade,ReqMean);

【讨论】:

这已经回答了我的问题并解决了问题,谢谢。

以上是关于如何使用 scanf 将元素接收到数组中?的主要内容,如果未能解决你的问题,请参考以下文章

实验4 数组

如何使用 if 条件将 django 数组元素添加到 js 数组中

如何将从服务接收到的 json 数据传递到 Angular 4 的角材料组件中的数组

如何访问函数返回数组的元素?

如何在Django中接收JSON格式的数据

如何定义一个动态的数组