【发布时间】:2017-03-19 05:59:10
【问题描述】:
我正在上学做作业。任务是用 C 语言编写程序,可以用 *、-、+ 等矩阵做一些简单的事情。
我的程序正在读取矩阵并将它们保存到 int 数组。当矩阵输入结束时,我扫描到 char 以了解我将对矩阵执行什么操作。操作是存储在 char 数组中。 (输入最多可以有 100 个矩阵,因此中间有 99 个操作)。如果用户写 * 一切正常,但是当用户写“-”或“+”时它存储“/n”。我正在谷歌搜索和调试,但仍然不知道为什么会发生这种情况。欢迎任何建议。
用户输入如下所示:第一行是矩阵的大小。
2 3
76 98 -31
30 30 32
-
2 3
89 25 38
1 -32 -38
int* readMatrix(int width, int height, char arrayOperation[], int numberOfMatrix, int*err)
{
int sizeOfMatrix = ((height*width) + 3), i = 0;
char operation = 'n';
int *arrayMatrix = malloc(sizeOfMatrix* sizeof(int));
arrayMatrix[0] = width;
arrayMatrix[1] = height;
for (i = 2; i <= sizeOfMatrix; i++)
{
if (i == sizeOfMatrix)
{
if (scanf_s("%c", &operation) != EOF)
{
if (operation == '*' || operation == '-' || operation == '+')
{
arrayOperation[numberOfMatrix] = operation;
}
else
{
*err = 100;
}
}
else
{
arrayOperation[numberOfMatrix] = 'n';
break;
}
}
else if (scanf_s("%d", &(arrayMatrix[i])) == 1)
{
*err = 0;
}
}
return arrayMatrix;
}
在 * 的情况下,var 操作==*,但在 -,+ 操作中==/n。我在循环中调用这个函数,输出数组存储在 int** 数组中。
【问题讨论】:
-
除非您的学校要求,否则不要使用
scanf_s。它不是标准的 C 函数,而是 Microsoft 扩展。scanf是标准 C。 -
通常我在linux中使用终端来编译运行和调试。但是这次我不确定是什么问题,所以我使用VS进行调试。所以就当它是“scanf”吧。
-
有邪恶的
scanf_s()和scanf()- 避免他们 - 他们不是你的朋友。当读取 lines 的输入时,使用良好的fgets()。然后代码可以通过多种方式sscanf()行,寻找数字,-等 -
@DUman
scanf_s在 C11 标准附录 K.3.5.3.4 中指定