当前位置: 首页 > 知识库问答 >
问题:

将输入的数据存储在数组中[重复]

顾鸣
2023-03-14

我是C语言的初学者。如果我的问题是蹩脚的,请不要介意。在我写的这个程序中,当我第一次使用“for”循环时,我希望一个数组中只存储3个值,但它存储4个值,在接下来的“for”循环中,如预期的那样显示3个值。我的问题是为什么在第一个for循环中需要4个值而不是3个?

#include<stdio.h>
void main()
{
    int marks[3];
    int i;

    for(i=0;i<3;i++)
    {
        printf("Enter a no\n");
        scanf("%d\n",(marks+i));
    }
    for(i=0;i<3;i++)
    {
        printf("%d\n",*(marks+i));
    }
}

共有2个答案

师赤岩
2023-03-14

删除\ni可以在if语句中创建为for(int i=0;i

冯枫
2023-03-14

\nscanf是问题

#include<stdio.h>
int main()
{
    int marks[3];
    int i;

    for(i=0;i<3;i++)
    {
        printf("Enter a no\n");
        scanf("%d",(marks+i));
    }

    printf("\nEntered values:\n");
    for(i=0;i<3;i++)
    {
        printf("%d\n",*(marks+i));
    }

    return 0;
}

原因:

我期望只有3值存储在数组中,但它存储4个值,并在下一个'for'循环中显示3个值。我的问题是为什么在第一个for循环中需要4个值而不是3个?

第一:否,它只存储3number,而不存储4数组中的数字marks[]

第二:有趣的是了解循环在i=0i时只运行三次

您的困惑在于为什么必须输入四个数字,这不是因为您循环运行了4次,而是因为scanf()函数仅在您输入非空格字符时返回(并且在按下一些enter键后,您输入了一个非空格字符的数字符号)。

要理解此行为,请阅读手册:intscanf(constchar*格式,…)

一系列空白字符(空格、制表符、换行符等;请参见isspace(3))。此指令匹配输入中任意数量的空白,包括无空白。

因为在第一个for循环中,在scanf()中,您已将\n包含在格式字符串中,所以scanf()仅在按数字输入(或非空格)时返回。

 scanf("%d\n",(marks+i));
           ^
           |
            new line char 

会发生什么?

假设程序的输入为:

23        <--- because of %d 23 stored in marks[0] as i = 0
<enter>   <--- scanf consumes \n, still in first loop
543       <--- scanf returns, and leave 542 unread, 
                               then in next iteration 543 read by scanf in next iteration
<enter> 
193
<enter>  <--- scanf consumes \n, still in 3rd loop
<enter>  <--- scanf consumes \n, still in 3rd loop
123      <--- remain unread in input stream 

 类似资料:
  • 问题内容: 我正在尝试将sql数据库中的数据存储到数组中。目前我有这个: 问题是我有8行数据。我需要将数据库中的每个8个名称存储到一个数组中。当我尝试这个: 它不起作用。 问题答案: 您想要的是: 这会将所有8个名称存储在类似于以下内容的数组中:

  • 我不知道用户会输入多少个数字,并且我需要程序在到达行尾时停止在数组中插入数字,因为在新行中用户会输入一个与此无关的数字。 例如: 用户可以输入: 1 5 7 8 9 5 4 或: 5 4 8 9 4 2 1 3 2 4 7 我需要的数组是,示例1:[1,5,7,8,9,5]

  • 问题内容: 在此先感谢您的帮助。 好吧,这就是我的情况。我有一个Web系统,该系统基于超声波计创建的样本进行一些与噪声相关的计算。最初,数据库仅存储这些计算的结果。但是现在,我被要求也自己存储样本。每个样本只是一个300或600个数字的列表,每个数字都有一个小数。 因此,我想到的最简单的方法是在表中添加一列,该列存储给定样本的所有计算。此列应包含数字列表。 那么我的问题是:将这一数字列表存储在单列

  • 我目前正在构建一个项目,其中我需要为每个用户保存一个字符串列表(他阅读的文章的网址)。 我正在使用带有sqlite的python烧瓶SQLalchemy。 我知道sqlite不支持数组,所以我正在考虑切换到另一个数据库,而不是sqlite,一个支持数组的数据库。 我想知道你会怎么做?哪个数据库支持数组,或者是否有更好的解决方法。

  • 问题内容: 我是Java新手。我如何在HashMap中存储整数值数组,之后我将此HashMap写到txt文件中,但此刻目前不重要。我可以存储单个字段,但不能存储数组。有任何想法吗 ? 问题答案: 例如选一个 要不就

  • 问题内容: 结果是 在哪里重复,因此哈希函数无法按预期工作。我将如何覆盖String数组的Hash方法。或就此而言,通用数组?有没有更好的方法来完成我要做的事情? 问题答案: 你不能 数组使用默认的基于身份的Object.hashCode()实现,无法覆盖它。不要在HashMap / HashSet中将数组用作键! 请改用一组列表。