簡體   English   中英

c中的fgets使用錯誤

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

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