我正在上学做作业。任务是在C中制作程序,可以用*, - ,+等矩阵做一些简单的事情。
我的程序正在读取矩阵并将它们保存到int数组中。当矩阵输入结束时,我扫描到char以了解我将如何处理矩阵。操作是char数组中的存储。 (输入时最多可以有100个矩阵,因此可以进行99次操作)。如果用户写*一切都没问题,但是当用户写'' - '或' +'它存储' / n'。我在Google上搜索和调试,但仍然不知道为什么会这样。任何建议都是受欢迎的。
用户输入如下所示:第一行是矩阵的大小。
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操作== *,但是在 - ,+ operation == / n。我在循环中调用此函数,输出数组存储在int **。
的数组中答案 0 :(得分:1)
scanf("%c"
读取下一个字符而不跳过任何空格,因此它将存储最后一个读取后的内容 - 通常是换行符。如果要跳过空格,请为格式添加空格:
scanf(" %c", &operation)
这将跳过任何空格并存储下一个非空白字符。
除{/ em> %d
和%c
以外的所有转换模式时,%[
并不需要这样做。
答案 1 :(得分:0)
我正在和我的讲师讨论这个特殊问题。
我理解这一点:当scanf读取数字时,它会跳过空格和/ n。
所以阅读&#34; 32 / n - &#34;导致阅读一切。阅读&#34; 32 / n *&#34;它停在&#34; *&#34;因为它没有任何数字的标志。所以它表现得很愚蠢。
这可以解决使用fgets()函数并通过char读取它。