将数字从输入加载到数组中

时间:2016-01-13 09:26:39

标签: c arrays

我已经输入了包含我要处理并保存到数组中的数据的输入。输入如下所示:

char d_name[PATH_MAX];

它可以包含更多元素。我需要处理它,我可以将[number,number]中的所有数字加载到2d数组中,第一个数字应该是0,第二个数字应该是第1个索引,所以这个数组应该看起来像

{ [1, 10], [2,1] , [-10, 20] }

但是我找不到解决方案,如何将此输入处理到我想要的数组中。做正确的方法是什么? 我试着做如下:

[[1,10],[2,1],[-10,20]]

但不知何故,它会返回意外结果,我该如何解决?

2 个答案:

答案 0 :(得分:1)

您应该使用gets而不是scanf。获取将返回整个字符串将是舒适的。那么你应该读一下strtok可以用来分隔一个字符串。例如:strtok(s,“,”)将您的字符串分隔为更小的字符串。对于输入{[12,4],[8,9]}将分为:第一个字符串:{[12秒字符串:4]第三个字符串[8和第四个字符串9]}。现在,您只需删除不是{}和[]等数字的字符。之后你将只有数字字符串,所以你可以使用另一个预定义的函数你应该读取名为atoi的abput。它收到一个字符串并将其转换为int(ascci到int)。如果你需要它还有一个atof(ascci浮动)。 Tuturialpoints是一个寻找如何使用我提到的这些功能的例子的好地方。

答案 1 :(得分:1)

我对C和SO比较陌生。也许我不应该给你解决方案,但我做到了。它遵循敏锐的学生的建议。

您可以尝试这样做:

#include "stdafx.h"
#include "string.h"
#include "stdlib.h"

#define MAXNBRELM 10    //  maximum number of elements; adjust as needed

int main()
{
    int     IntArr[MAXNBRELM][2];   //  integer array to hold results
    int     s = 0;                  //  subscript
    int     NbrElm;                 //  number of elements found
    char    Buf[81];                //  buffer to hold input
    char    * StrPtr;               //  pointer to string for fgets         
    char    * TknChr;               //  each individual token
    char    * NxtTkn;               //  next token position (only needed for Visual C++)

    StrPtr = fgets(Buf, 80, stdin);

    TknChr = strtok_s(Buf, " {[,]}", &NxtTkn);
    while (s <= MAXNBRELM && TknChr != NULL) {
        IntArr[s][0] = atoi(TknChr);
        TknChr = strtok_s(NULL, " {[,]}", &NxtTkn);
        if (TknChr != NULL) {
            IntArr[s][1] = atoi(TknChr);
            TknChr = strtok_s(NULL, " {[,]}", &NxtTkn);
            s++;
        }
    }

    NbrElm = s;
    for (s = 0; s < NbrElm; s++)
        printf("%d %d\n", IntArr[s][0], IntArr[s][1]);

    return 0;
}

这是针对Visual Studio的,这就是为什么我需要使用strtok _s 和&amp; NxtTkn。