没有先前’if’的’else’

我刚刚开始学习C编程,所以我并没有真正处于高级水平。 忍受我!

我有这段代码,我想我很容易理解我要做的事情。 但是我收到一个错误,说没有if之前调用了最后一个else。

我怀疑问题是if和else之间的if-else语句。 你们怎么解决它?

int talet; scanf("%d", &talet); int i = 1; while (i <= 99) { int a; { if (i % talet == 0 || talet == (i / 10) % 10 || talet == i % 10) { if (talet % 10 == 0) printf("\n"); else continue; } printf("burr "); else printf("%d ", i); } i = i + 1; } 

问题出在你的括号上。 缩进对于了解打开和关闭括号的位置非常重要

 int talet; scanf("%d",&talet); int i=1; while(i<=99) { int a; if (i%talet==0 || talet==(i/10)%10 ||talet==i%10) { if (talet%10==0) printf("\n"); else continue; printf("burr "); } else { printf("%d ",i); } i=i+1; } 

你的问题在这里:

 } printf("burr "); //<--- else printf("%d ",i); 

你不能在else块之前有任何声明。 所以删除它或将其移动到else或OR块中,如下所示:

 } else { printf("burr "); printf("%d ",i); } 

问题是你在if括号外有一个printf 。 因此,编译器认为if语句已完成。 当它到达else ,抛出一个错误,因为没有open if条件

你应该有这个

 if (i%talet==0 || talet==(i/10)%10 ||talet==i%10) { if (talet%10==0) printf("\n"); else continue; printf("burr "); // <-- this was moved } else printf("%d ",i); 

尽量保持代码块尽可能干净和可读。 这可以防止你犯错误。

你可以写一个if else Horstmann风格:

 if (condition) { #statements } else { #statements } 

或TBS1风格更紧凑:

 if (condition) { #statements } else { #statements } 

选择一个你喜欢的,在crashmstr提供的评论中更多样式(感谢他),并坚持下去。 它将提高您的代码质量。