[英]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.