【发布时间】:2017-01-26 20:14:54
【问题描述】:
我需要用字符串中的数字填充二维数组,所以我使用strtok 和fgets 来获取字符串并对其进行标记。但是,如果我输入“1 2 3 4 5”并且二维数组的尺寸为 2x2,则 5 永远不会分配给 number。我想检查是否有超过矩阵可以容纳的数字,但number 在将 4 添加到矩阵而不是 5 之后总是以 NULL 结束。我知道 SIZE 是正确的,因为如果我之前打印出 stringInputted strtok 它打印出正确的输出。
scanf("%d", &rows);
scanf("%d", &columns);
//SIZE = 2*rows*columns+1
//rows and columns are user inputted and stored using scanf
fgets(stringInputted, SIZE, stdin);
char *number = strtok(stringInputted, " \n");
for(i = 0; i < rows; i++){
for(j = 0; j < columns; j++){
if(number != NULL)
matrix[i][j] = atoi(number);
else{
printf("ERROR Insufficient numbers entered\n");
return 0;
}
number = strtok(NULL, " \n");
}
}
if(number != NULL) printf("TOO MANY NUMBERS\n");
【问题讨论】:
-
能否包含您对
SIZE、rows和columns的定义?另外,您的问题提到了input,但您的代码列出了stringInputted。 -
已编辑。 @chrisaycock
-
包装在
main函数中时无法重现。对于 2x2 矩阵,3 个值给出“ERROR insufficient...”,5 个值给出“TOO MANY NUMBERS”,4 个值则保持安静。 -
嗯,这很奇怪,你是如何输入这些值的?我有它,所以用户将它们输入 1 个字符串“2 2 1 2 3 4...” 前两个将是矩阵的大小。 @WeatherVane
-
1 2 3 4 5的长度为9。所以SIZE需要10个或更多。
标签: c arrays multidimensional-array fgets strtok