我已经输入了包含我要处理并保存到数组中的数据的输入。输入如下所示:
char d_name[PATH_MAX];
它可以包含更多元素。我需要处理它,我可以将[number,number]中的所有数字加载到2d数组中,第一个数字应该是0,第二个数字应该是第1个索引,所以这个数组应该看起来像
{ [1, 10], [2,1] , [-10, 20] }
但是我找不到解决方案,如何将此输入处理到我想要的数组中。做正确的方法是什么? 我试着做如下:
[[1,10],[2,1],[-10,20]]
但不知何故,它会返回意外结果,我该如何解决?
答案 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。