簡體   English   中英

char數組中的scanf'-'或'+'

[英]Cant scanf '-' or '+' in char array

我正在上學功課。 任務是用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("%c"讀取下一個字符而不跳過任何空格,因此它將存儲上次讀取的內容(通常是換行符)。如果要跳過空格,請在格式中添加一個空格:

scanf(" %c", &operation)

這將跳過任何空格並存儲下一個非空格字符。

您不需要%d就能做到這一點,因為除了 %c%[跳過空格之外 ,所有轉換模式都可以

我和我的講師討論了這個特殊的問題。

我理解這一點:當scanf讀取數字時,它會跳過空格和/ n。

因此,讀取“ 32 / n-”將導致讀取所有內容。 當讀取“ 32 / n *”時,它停在“ *”,因為它不是任何數字的符號。 所以它的行為有點愚蠢。

這可以解決使用fgets()函數並通過char讀取它的問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM