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