【问题标题】:How to scanf each number into an array slot?如何将每个数字扫描到数组插槽中?
【发布时间】:2014-06-09 16:07:08
【问题描述】:

我正在尝试将每个数字扫描到每个数组插槽中。所以第一个数字将进入插槽 1,第二个数字将进入插槽 2 etx。我该怎么做呢?使用下面的代码,所有数字都存储在插槽 1 中。我想一起输入所有数字,一次没有 1 个数字。请问有人可以告诉我该怎么做吗?

#include <stdio.h>

int main()
{
    int lotoNumbers[7];

    printf("Please enter todays winning ticket number:");
    scanf("%d%d%d%d%d%d%d", &lotoNumbers[1],
                            &lotoNumbers[2],
                            &lotoNumbers[3],
                            &lotoNumbers[4],
                            &lotoNumbers[5],
                            &lotoNumbers[6],
                            &lotoNumbers[7]);

    printf("Your loto ticket number is: %d%d%d%d%d%d%d",
                lotoNumbers[1],
                lotoNumbers[2],
                lotoNumbers[3],
                lotoNumbers[4],
                lotoNumbers[5],
                lotoNumbers[6],
                lotoNumbers[7]);

    return(0);
}

【问题讨论】:

  • 无关说明:在C语言中,数组索引从0开始,到n - 1,其中n是数组的大小。你有它从17,它应该从06
  • 你的问题不清楚。

标签: c arrays scanf


【解决方案1】:

下面的代码将让您一次获得所有内容,以空格分隔... 此外,您的代码从 1 到 N 开始计数,您必须从 0 到 N - 1

#include <stdio.h>



int main()
{

    int lotoNumbers[7];


    printf("Please enter todays winning ticket number:");
    scanf("%d %d %d %d %d %d %d",&lotoNumbers[0],&lotoNumbers[1],&lotoNumbers[2],&lotoNumbers[3],&lotoNumbers[4],&lotoNumbers[5],&lotoNumbers[6]);
// scanf("%d.%d.%d.%d.%d.%d.%d",&lotoNumbers[0],&lotoNumbers[1],&lotoNumbers[2],&lotoNumbers[3],&lotoNumbers[4],&lotoNumbers[5],&lotoNumbers[6]);

    printf("Your loto ticket number is: %d %d %d %d %d %d %d", lotoNumbers[0], lotoNumbers[1], lotoNumbers[2], lotoNumbers[3], lotoNumbers[4], lotoNumbers[5], lotoNumbers[6]);

return(0);
}

查看注释的 scanf... 如果您输入以 . 分隔的数字,它将起作用。 :

    312.832.3278.3217.3123.7812.8

但是如果你将所有 %d 粘在一起,它如何知道数字 145 是单个数字还是 1、4、5 或 14、5 或 1、45...

【讨论】:

  • 没有空格有没有办法做到这一点?
  • 要读取包含多于 1 位的数字,数字之间必须有某种分隔符。就个人而言,我会使用 getch(),将每个字符保存在数组/字符串中,直到读取一个非数字,将结果字符串转换为数字,将结果数字放入 lotoNumbers[],使用 getch() 并将结果折腾直到再次读取一个数字,然后循环,从“保存每个字符”开始
【解决方案2】:

使用"%1d"。这将扫描的宽度限制为 1 char

int lotoNumbers[7];
if (scanf("%1d%1d%1d%1d%1d%1d%1d", &lotoNumbers[0], &lotoNumbers[1],
    &lotoNumbers[2], &lotoNumbers[3], &lotoNumbers[4], &lotoNumbers[5],
    &lotoNumbers[6]) == 7) {
  GoodToGo();
}

检查 scanf() 结果并从 0 开始索引。

【讨论】:

    【解决方案3】:

    使用 getchar() 函数代替 scanf 来获取单个字符。 getchar() 或 getch() 函数在输入后不需要按 ENTER。这是代码 -

    int loto[7];
    
    int i;
    char c;
    
    for(i=0;i<7;i++){
    
        c=getchar();
    
        int temp=c-'0';
    
        loto[i]=temp;    
    }
    

    【讨论】:

    • 如果我想存储 numbers 而不是 digits 怎么办?我在我的 ASCII 表中几乎找不到“42”字符... :)
    • 对于数字 getchar() 不起作用。这个问题是专门针对数字提出的
    • OP 使用了一次“数字”,使用了 4 次“数字”。另外:我们可以假设彩票不是仅由数字组成的(尽管它会非常好!)。我认为无论如何都值得一提:)
    【解决方案4】:

    试试这个:

    #include <stdio.h>
    int main()
    {
        int lotoNumbers[7];
        printf("Please enter todays winning ticket number:");
        scanf("%d%d%d%d%d%d%d",&lotoNumbers[0],&lotoNumbers[1],&lotoNumbers[2],&lotoNumbers[3],&lotoNumbers[4],&lotoNumbers[5],&lotoNumbers[6]);
    
        printf("Your loto ticket number is:\n");
        for(int i=0;i<7;i++)
        {
            printf("%d\n",lotoNumbers[i]);
        }
        return(0);
    }
    

    【讨论】:

    • 没有空格有没有办法做到这一点?
    猜你喜欢
    • 1970-01-01
    • 2013-08-27
    • 2018-10-29
    • 1970-01-01
    • 1970-01-01
    • 2016-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多