C中的预期表达式错误

时间:2014-03-31 14:34:44

标签: c function

我试图创建两个函数。第一个函数接受来自用户的整数输入,直到它们在0到100之间.thons函数显示对stdOut的验证。 然而,它一直给我一个错误说"预期表达"当我调用该函数时。

#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");
    }

5 个答案:

答案 0 :(得分:2)

你的电话中有误导int,他们需要去。

电话应该是:

x = input();
validate(x);

你不能将一个整数传递给一个函数,期望它在调用者的上下文中改变,而不是C的传值值语义如何工作。您应该从input()返回数字,即其原型应为int input(void);

答案 1 :(得分: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;
}

答案 2 :(得分:1)

这个程序的几乎每一行都至少有一个bug。

这是一个标准问题,其中存在大量不正确的建议(最重要的是,只应使用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

}

正确。

答案 3 :(得分:0)

我敢打赌编译器会在你编写带缺少分号的函数声明的地方要求你提供一个表达式。

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

这些都不是函数调用。

答案 4 :(得分: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;
}