在c中使用fgets时出错

在c中使用fgets时出错,c,stack,fgets,C,Stack,Fgets,我已经编写了一个带有堆栈的平衡符号检查器。其他一切都正常工作,我已经完全测试了所有功能,比如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[

我已经编写了一个带有堆栈的平衡符号检查器。其他一切都正常工作,我已经完全测试了所有功能,比如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]);

    }
}
当我尝试显示堆栈并正确地推送值时,效果非常好。 在这一点上,我认为要么是带有fgets的初始char数组没有正确初始化,要么是我设法搞砸了if/for循环

当我运行程序时,即使我在stdin中键入{[(或<),if语句条件也永远不会满足。当我试图打印输入[10]字符数组时,我的程序也会崩溃。

for循环错误

试一试

所以,如果你写这篇文章:

int i = 0;
for (i < 10; i++; ) {
    ...
}
inti=0;
对于(i<10;i++;){
...
}
发生以下情况:


首先进行初始化。
i<10
被执行,但它是一个简单的逻辑表达式,其计算结果为
true
并被忽略。然后检查该条件。
i++
计算结果为0(不是1,因为后增量),这被解释为
false
,循环终止。

您的代码中有很多问题

(一)

应该是:

    char input[11];
您也需要“\0”

(二)

始终检查退货:

    if (fgets(input, 10, stdin) != NULL){}
(三)

(i<10;i++;){} 如果是错误的,应该是:

    for (;i < 10; i++){}
(;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;
}
#包括
#包括
内部主(空){
字符输入[11];
int i=0;
printf(“为天平输入10个字符:”);
如果(fgets(输入,10,标准输入)!=NULL){
对于(;i<10;i++){
/*在这里做你需要的*/
}
}
printf(“再见”);
返回0;
}

您是否检查了fgets(input,10,stdin)!=NULL?
input
只能存储9个输入字符(后跟
'\0'
终止符)。我看不出这会有什么变化。我被教导可以在for循环之外初始化I。@user3457828是的,但您至少需要一个字符;更多字符将用于(;I)
    char input[11];
    fgets(input, 10, stdin);
    if (fgets(input, 10, stdin) != NULL){}
    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;
}