2014-03-31 148 views
-3

我试图创建两个函数。第一个函数接受来自用户的整数输入,直到它们介于0和100之间。秒函数显示对stdOut的验证。 但是,当我调用函数时,它总是给我一个错误,说“预期的表达式”。C中的预期表达式错误

#include <stdio.h> 
    // function prototype for the function input 
    int input(int); 
    // function prototype for the function validate 
    int validate(int); 

    //main function 
    int main(void) 
    { 

     //calling the function input 
     input(int x) 
     //calling the function validate 
     validate(int y) 

     return 0; 

    } 

    // Function definition for input 
    int input(int a) 
    { 
     int r; 
     printf("Enter the int value of r\n"); 
     scanf("%d",&r); 
    } 

    // Function definition for validate 
    int validate(int b) 
    { 
     int r; 

     if(r>= 0 && r<= 100) 
      printf("Valid number"); 
     else 
      printf("Invalid"); 
    } 
+7

你调用函数的方式是完全错误的。我认为最好告诉你阅读这本书,而不是告诉你他们应该做什么。 –

+2

你的函数也没有返回值,并忽略输入参数。 – interjay

+3

你不能仅仅猜测C语法。您实际上必须了解源代码中的每一行是什么意思。 – Lundin

回答

1

您需要在您的main()函数的每一行代码的末尾添加分号,并删除类型说明符的函数调用。另外,不要忘记在某处声明变量xy

int main(void) 
{ 
    int x=0; 
    int y=0; 

    //calling the function input 
    input(x); 
    //calling the function validate 
    validate(y); 

    return 0; 
} 
0

我敢打赌,编译器会询问您一些地方,你写一个函数声明与缺少分号的表达式。

//calling the function input 
    input(int x) 
    //calling the function validate 
    validate(int y) 

这些都不是函数调用。

2

你在你的通话中有流浪int s,他们需要去。

的呼声也许应该是:

x = input(); 
validate(x); 

可以整数不传递给功能的期望它在调用者的上下文改变,那不是如何C'S传递值语义工作。您应该仅从input()返回号码,即其原型应为int input(void);

1

这个程序的几乎每一行至少有一个错误。

这对于那些有一大堆不正确的意见出来有没有一个标准问题(最重要的是,只有strtol/strtoul/strtod家庭的功能应该用于字符串转换为数字;从不使用atoi家庭和never use scanf)所以我要给出一个完整的工作示例,如何正确编写该程序,包括正确使用注释。

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

long read_number_in_range(const char *prompt, long lo, long hi) 
{ 
    /* a signed 64-bit number fits in 21 characters max, +1 for '\n', +1 for NUL */ 
    char buf[23], *endp; 
    long rv; 

    for (;;) { 
     puts(prompt); 
     if (!fgets(buf, sizeof buf, stdin)) { 
      perror("stdin"); 
      exit(1); 
     } 
     errno = 0; 
     rv = strtol(buf, &endp, 10); 
     if (endp != buf && (*endp == '\0' || *endp == '\n') 
      && !errno && rv >= lo && rv <= hi) { 
      return rv; 
     } 
     puts("?Redo from start"); 
    } 
} 

int main(void) 
{ 
    long val = read_number_in_range("Enter the int value of r", 0, 100); 
    /* do something with val here */ 
    return 0; 
} 

阅读关于行由行原计划的挑剔。

#include <stdio.h> 

正确。

// function prototype for the function input 

评论冗余代码。

int input(int); 

函数签名不正确(请参阅函数体的注释)。

// function prototype for the function validate 

评论冗余与代码。

int validate(int); 

函数签名不正确(请参阅函数体的注释)。

//main function 

评论冗余代码。

int main(void) 
{ 

正确。

//calling the function input 

评论冗余代码。

input(int x) 
  • 变量不能内部函数调用的表达式来声明。
  • 函数的返回值被忽略。
  • 在行尾缺少分号。
//calling the function validate 

注释冗余的代码。

validate(int y) 
  • 值从input返回应该传递给validate,想必,而不是一个新的未初始化的变量。
  • 变量不能在函数调用表达式中声明。
  • 函数的返回值被忽略。
  • 在行尾缺少分号。
return 0; 
} 

正确的。

// Function definition for input 

评论冗余代码。

int input(int a) 
{ 

参数a是不必要的。

int r; 

正确。

printf("Enter the int value of r\n"); 

轻微:使用puts当没有什么格式时。

scanf("%d",&r); 

Never use scanf

} 

缺失return r;

// Function definition for validate 

评论冗余与代码。

int validate(int b) 
{ 

函数没有返回值,所以应该是void validate(int b)

int r; 

不必要的变量。

if(r>= 0 && r<= 100) 

r应该b在这条线上。

 printf("Valid number"); 
    else 
     printf("Invalid"); 

轻微:再次,puts

} 

正确。

0
#include <stdio.h> 

int input(int*); 
int validate(int); 

int main(void){ 
    int x; 

    input(&x); 
    if(validate(x)) 
     printf("Valid number"); 
    else 
     printf("Invalid"); 

    return 0; 

} 

int input(int *r){ 
    printf("Enter the int value of r\n"); 
    scanf("%d", r); 
    return *r; 
} 

int validate(int r){ 
    return r>= 0 && r<= 100; 
}