如何使用 scanf 将元素接收到数组中?
Posted
技术标签:
【中文标题】如何使用 scanf 将元素接收到数组中?【英文标题】:How do I receive elements into an array using scanf? 【发布时间】:2022-01-11 23:09:04 【问题描述】:我正在学习 C 编程,但在使用 scanf
将值初始化到数组中时遇到了问题。 In this example、10
、32
和 20
作为数组的值输入; 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", &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 将元素接收到数组中?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 if 条件将 django 数组元素添加到 js 数组中