错误:添加显式大括号以避免悬空。 C

我正在使用gedit而且我的编译器是clang。 我最近得到了几个这样的错误,不知道如何修复(标题错误和引用else语句)。

if(isupper(ptext[i])) if ((((ptext[i]+k)%26)+52)  90) { printf("%c", (((ptext[i]+k)%26)+78)); } else { printf("%c", (((ptext[i]+k)%26)+52)); } 

我应该添加/删除/修复什么? 提前致谢 :)

你的外部if缺少大括号:

 if(isupper(ptext[i])) { if ((((ptext[i]+k)%26)+52) < 65 || (((ptext[i]+k)%26)+52) > 90) { printf("%c", (((ptext[i]+k)%26)+78)); } else { printf("%c", (((ptext[i]+k)%26)+52)); } } 

就个人而言,我会将一些常见元素提取到变量中:

 char something1 = ptext[i]; if(isupper(something1)) { char something2 = (something1+k)%26; if ((something2+52) < 65 || (something2+52) > 90) { printf("%c", (something2+78)); } else { printf("%c", (something2+52)); } } 

甚至可能把一个char something3 = something2 + 52; 在那里。 当然,有更有意义的变量名称。

C不像Python那样通过缩进告诉什么属于什么。 因为在C中,所有空格都被忽略。 您需要使用大括号来告诉编译器else属于哪个if语句。

C编译器不知道,所以要求你指定:

是这个吗?

  if(isupper(ptext[i])) { if ((((ptext[i]+k)%26)+52) < 65 || (((ptext[i]+k)%26)+52) > 90) { printf("%c", (((ptext[i]+k)%26)+78)); } else { printf("%c", (((ptext[i]+k)%26)+52)); } } 

或这个?

  if(isupper(ptext[i])) { if ((((ptext[i]+k)%26)+52) < 65 || (((ptext[i]+k)%26)+52) > 90) { printf("%c", (((ptext[i]+k)%26)+78)); } } else { printf("%c", (((ptext[i]+k)%26)+52)); } 

这是一个“悬空”的例子。