首页 > 解决方案 > 错误:函数中 ')' 标记之前的预期表达式 } else(){

问题描述

我在网上到处找,我完全迷路了,开始真的生气了。我在任何地方看到的都与我看到的错误无关,就好像整个世界都有这个问题,但是一个完全不同的解决方案。这令人沮丧,因为我在任何地方看到的修复似乎都与我的问题无关。这是我的代码,我祈祷有人可以帮助我......

#include<stdio.h>
#include<stdlib.h>

int count = 0;
int state = 1;
int copy = getchar();

int main() {
     if (state != 0){
    
        while (copy != EOF)
           count++;
    
        state = 0;
    } else(){
         printf("The function has finished, your name has %d characters", count);
         count = 0;
         state = 1;
     }
 }

忽略括号在深度方面的位置,我一定是个该死的傻瓜,因为无论我做什么(```,或''',或ctrl k等)我都无法让该死的代码缩进超过一行,所以我逐字逐句添加了 5 个空格。我希望我做得很好,我希望有人可以向我解释我没有看到什么......

标签: c

解决方案


这段代码中有很多东西偏向一边,但很容易修复:

#include <stdio.h>
#include <stdlib.h>

// Avoid using global variables

int main() {
  int count = 0;

  // Always use { ... } around your blocks to avoid ambiguity, even for
  // simple one-liners like this.
  while (getchar() != EOF) {
    count++;
  }

  // Don't forget \n to add a newline
  printf("The function has finished, your name has %d characters\n", count);

  // Return 0 from main() to be polite
  return 0;
}

那只if (state != 0)会触发第一个分支,再也没有机会再次访问该行,因此您的程序无需打印即可完成。我已经在这里删除了。请记住if,这是一个瞬间发生的测试,因为程序通过该部分工作,而不是一个持久的测试,如果/当变量发生变化时会触发。

要记住的一件事是,在 C 中,当您分配给变量时,该变量是将值从右侧 (RHS) 复制到左侧 (LHS) 的操作。换句话说:

int x = 1;
int y = x;

x = x + 1;
printf("x=%d, y=%d\n", x, y);

这打印x=2, y=1。说y = x不像在数学中你在陈述某种等价。这纯粹是一个任务。这是一条指令(机器指令,字面意思)复制xy, wherexy是单独的“对象” 1


1 C 术语粗略地描述可以但不总是存储在内存中的值。有时它们被保存在寄存器中。技术版本:“对象是执行环境中的数据存储区域,其内容可以表示值”。


推荐阅读