【问题标题】:i can't find the error syntax in loop for: c我在循环中找不到错误语法:c
【发布时间】:2018-12-21 11:20:03
【问题描述】:

我有一个练习要求我纠正语法错误,我试图纠正,但每次我想编译它时都会在 for 循环中显示一个错误。

(该练习允许计算并显示用户输入的句子中元音字母的数量,用户通过输入“*”表示输入的结束)

#include <stdio.h>
main(){
char c;
char TV[5];
int k;
for (k = 0; k < 5; k++)
 {
 TV[k]=0;
  }
 printf("Entrer un texte. Tapez le caractére * pour sortire. \n");
 c = getchar();
while(c!='*')
{
  switch (c) {
     case 'A': TV[0]++;
     case 'a': TV[0]++;
     case 'E': TV[1]++;
     case 'e': TV[1]++;
     case 'I': TV[2]++;
     case 'i': TV[2]++;
     case 'O': TV[3]++;
     case 'o': TV[3]++;
     case 'U': TV[4]++;
     case 'u': TV[4]++;
    default: c = getchar();

   }
 }
 printf("a \t e \t i \t o \t u \n");
 for(k=0;k<5;k++)
 {
  printf("%d \t",TV[k]);
 }
 }

错误信息:

mariem@MIGI:~/Bureau/syt_exp$ gcc Tp6-lesChaines-Exercice1.c
Tp6-Channels-Exercise1.c:2:1: warning: return type defaults to ‘int’ [-Wreturn-type]
 main(){
 ^~~~
mariem@MIGI:~/Bureau/syt_exp$ ./Tp6-lesChaines-Exercice1.c
./Tp6-Channels-Exercise1.c: line 6: syntax error near the unexpected symbol "("
./Tp6-Channels-Exercise1.c: line 6: `for (k = 0; k <5; k ++) '

我觉得现在好多了。

【问题讨论】:

  • 发布您的代码而不是发布带有代码的图像,因为图像不可见,但代码是
  • 请在帖子中包含代码/错误信息
  • Stackoverflow 应该为声誉较低的用户停用图片上传功能。
  • @ThomasSablik 不,这是一个糟糕的期望。在某些情况下,图像是帖子的连贯部分。只是,代码不应该作为图像发布 - 就是这样。
  • @SouravGhosh 是的,图像对于问题可能非常重要,但我很少将图像视为信誉

标签: c


【解决方案1】:

我没有看到语法错误。而且我无法复制代码来检查我的编译器。然而:

main 应声明为

int main(int argc, char **argv)

你的循环:while (c=='*')??你的意思是while (c!='*')

并且:case 应该以 break; 终止,否则继续执行。

【讨论】:

  • 我的意思是 while (c!=' *' ) 我已经修复了它,我不明白为什么我必须在 case 后面加上 break ???
  • 了解switch:如果没有break,下一条语句将被执行,所以在case 'A': TV[0]++;之后,TV[0]++;将与case 'a':一起执行
【解决方案2】:

为什么你没有声明 main() 类型?

int main()

【讨论】:

  • 您为什么不将此作为评论发布,而不是作为答案发布?
  • 我们可以写main()或者int main(),没问题,只是在代码的最后你必须写return 0 with int。
  • 这个问题之前stackoverflow.com/questions/13543428/…有人问过
  • 这并不能以任何方式回答问题。
【解决方案3】:

您正试图直接在 shell 中执行 C 源文件,就好像它是一个 shell 脚本一样。 C需要编译,然后你执行编译器创建的文件。

GCC 生成的默认名称是a.out,所以使用./a.out 执行它

【讨论】:

  • OP 确实编译了它,但他执行的是源代码而不是二进制文件
  • 我尝试使用 int main() 并编译但它仍然给我错误消息:linge2: syntax error near the unexpected symbol "("
  • @MIGI 正如 MrZebra 所说:1. 编译您的代码 (gcc Tp6-Channels-Exercise1.c) 和 2. 执行二进制文件 (./a.out)。不要执行源文件(不要./Tp6-Channels-Exercise1.c)。这是您问题的正确答案。
  • 哦,是的,我一直在执行源文件,现在可以使用了,谢谢 :)
  • @MIGI Great ^.^ 您可以单击答案旁边的复选标记以接受它是正确的
【解决方案4】:

几件事...

1- 修复警告 - main(){ 应该是 int main(){ 或者甚至 void main(){ 有效,但返回类型 int 是这里最标准的。输入参数是可选的 - 即 argv/argc。

2- 编译后(您的操作正确),不指定可执行文件名称,编译器生成的默认 .exe 为a.outa.exe。要运行,请在命令行中键入 ./a.exe

注意 - 通过做这两件事,我已经确认程序运行了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-03-03
    • 2021-01-01
    • 2016-07-07
    • 1970-01-01
    • 2021-09-22
    • 2020-12-14
    • 1970-01-01
    • 2015-01-22
    相关资源
    最近更新 更多