不能扫描' - '或' +'在char数组中

时间:2016-11-05 13:47:23

标签: c arrays matrix char

我正在上学做作业。任务是在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 **。

的数组中

2 个答案:

答案 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读取它。