我正在去学校做作业。任务是用 C 编写程序,可以使用 *、-、+ 等矩阵做一些简单的事情。
我的程序正在读取矩阵并将它们保存到 int 数组中。当矩阵输入结束时,我 scanf 到 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("%c"
读取下一个字符而不跳过任何空格,因此它将存储最后读取的内容之后的内容 - 通常是换行符。如果您想跳过空格,在格式中添加一个空格:
scanf(" %c", &operation)
这将跳过任何空格并存储下一个非空格字符。
您不需要使用 %d
作为所有转换模式,除了 %c
和 %[
跳过空格。
关于无法在字符数组中 scanf '-' 或 '+',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40438969/