我有一个练习要求我纠正语法错误,我试图纠正,但是每次我要编译时,都会在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 ++) '
我认为现在更好了。
答案 0 :(得分:2)
我没有看到语法错误。而且我无法复制代码以与我的编译器一起检查。但是:
main
应该声明为
int main(int argc, char **argv)
您的循环:while (c=='*')
?您的意思是while (c!='*')
。
并且:case
应该以{{1}}终止,否则执行将继续。
答案 1 :(得分:1)
为什么没有声明main()的类型?
int main()
答案 2 :(得分:1)
您正在尝试直接在Shell中执行C源文件,就像它是Shell脚本一样。需要编译C,然后执行由编译器创建的文件。
GCC生成的默认名称为a.out
,因此请使用./a.out
答案 3 :(得分:0)
几件事...
1-修复警告-surveyHash
应该为main(){
甚至int main(){
都可以,但是返回类型void main(){
是这里的最标准。输入参数是可选的-即argv / argc。
2-编译后(您做得正确),没有指定可执行文件名称,编译器生成的默认.exe是int
或a.out
。要运行,请在命令行上键入a.exe
。
注意-通过执行这两项操作,我已经确认程序可以运行。