[英]Error with fgets usage in c
我寫了一個帶有堆棧的平衡符號檢查器。 其他所有東西都可以正常工作,並且我已經完全測試了所有功能,例如pop push destroy isempty。 問題是我的fgets用法。
//fgets
char input[10];
printf("Enter a 10 character input for balance: ");
fgets(input, 10, stdin);
下面的代碼是“不起作用”的部分
int i = 0;
for (i < 10; i++;){
if (input[i] == '{' || input[i] == '[' || input[i] == '(' || input[i] == '<'){
push(&st2, input[i]);
}
}
我知道我的推送功能可以正常工作,因為我已經將它作為獨立版本進行了測試。 就像是:
push(&st2, '{');
當我嘗試顯示我的堆棧並正確推送值時,它工作得很好。 在這一點上,我在想要么帶有fgets的初始char數組未正確初始化,要么我已經設法以某種方式弄糟了if / for循環。
當我運行程序時,即使我在標准輸入中鍵入{[(或<,也不會滿足條件語句。如果嘗試打印我們的input [10] char數組,我的程序也會崩潰。
for循環是錯誤的。
嘗試
int i;
for (i = 0; i < 10; i++) {
...
}
代替。
正確的語法是
for (initialisation; condition; increment) {
body
}
所以,如果你這樣寫:
int i = 0;
for (i < 10; i++; ) {
...
}
發生以下情況:
首先進行初始化。 將執行i < 10
,但這是一個簡單的邏輯表達式,其結果為true
,將被忽略。 然后檢查條件。 i++
計算結果為0(由於后遞增,因此不為1),該值被解釋為false
並且循環終止。
您的代碼中有很多問題。
1)
char input[10];
printf("Enter a 10 character input for balance: ");
應該:
char input[11];
您也需要'\\ 0'。
2)
fgets(input, 10, stdin);
始終檢查退貨:
if (fgets(input, 10, stdin) != NULL){}
3)
for (i < 10; i++;){}
是錯誤的,應該是:
for (;i < 10; i++){}
你看得到差別嗎 ?
現在我們可以將它們放在一起:
#include<stdio.h>
#include<stdlib.h>
int main(void){
char input[11];
int i = 0;
printf("Enter a 10 character input for balance: ");
if (fgets(input, 10, stdin) != NULL){
for (;i < 10; i++){
/* do what you need here */
}
}
printf("Goodbye\n");
return 0;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.