C中的预期表达式错误

C中的预期表达式错误,c,function,C,Function,我试图创建两个函数。第一个函数接受来自用户的整数输入,直到它们介于0和100之间。秒函数向标准输出显示验证。 然而,当我调用函数时,它总是给我一个错误,说Expected expression #include <stdio.h> // function prototype for the function input int input(int); // function prototype for the function validate int

我试图创建两个函数。第一个函数接受来自用户的整数输入,直到它们介于0和100之间。秒函数向标准输出显示验证。 然而,当我调用函数时,它总是给我一个错误,说Expected expression

#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");
    }
// function prototype for the function validate
//main function

您需要在主函数中的每行代码末尾添加分号,还需要删除函数调用中的类型说明符。另外,不要忘记在某处声明变量x和y:

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

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

    return 0;
}

您需要在主函数中的每行代码末尾添加分号,还需要删除函数调用中的类型说明符。另外,不要忘记在某处声明变量x和y:

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

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

    return 0;
}

我敢打赌,编译器会在您编写函数声明时使用缺少分号的地方要求您输入表达式

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

这两个都不是函数调用

我打赌编译器会在您编写函数声明时使用缺少分号的地方要求您输入表达式

    //calling the function input
    input(int x)
    //calling the function validate
    validate(int y)
这两个都不是函数调用

您的电话中有一些杂音,他们需要挂断

这些电话可能是:

x = input();
validate(x);
您不能将整数传递给函数,并期望它在调用方的上下文中发生更改,这不是C的按值传递语义的工作方式。您应该只从输入返回数字,即它的原型应该是int-inputvoid

您的电话中有一些杂音,他们需要挂断

这些电话可能是:

x = input();
validate(x);

您不能将整数传递给函数,并期望它在调用方的上下文中发生更改,这不是C的按值传递语义的工作方式。您应该只从输入返回数字,即它的原型应该是int-inputvoid

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

这是一个标准问题,有很多不正确的建议。最重要的是,只有//函数族可以用于将字符串转换为数字;永远不要使用atoi系列,因此我将给出一个完整的示例,说明如何正确编写这个程序,包括正确使用注释

#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, +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;
        }
        // if we get here, fgets might not have read the whole line;
        // drain any remainder
        if (!strchr(buf, '\n')) {
          int c;
          do c = getchar();
          while (c != EOF && c != '\n');
        }
        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;
}
注释与代码冗余

int input(int);
int validate(int);
int main(void)
{
    input(int x)
    validate(int y)
int input(int a)
{
int validate(int b)
{
函数签名不正确请参见函数体上的注释

#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");
    }
// function prototype for the function validate
//main function
注释与代码冗余

int input(int);
int validate(int);
int main(void)
{
    input(int x)
    validate(int y)
int input(int a)
{
int validate(int b)
{
函数签名不正确请参见函数体上的注释

#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");
    }
// function prototype for the function validate
//main function
注释与代码冗余

int input(int);
int validate(int);
int main(void)
{
    input(int x)
    validate(int y)
int input(int a)
{
int validate(int b)
{

// function prototype for the function input
    //calling the function input
// Function definition for input
    printf("Enter the int value of r\n");
#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;
}
注释与代码冗余

int input(int);
int validate(int);
int main(void)
{
    input(int x)
    validate(int y)
int input(int a)
{
int validate(int b)
{
变量不能在函数调用表达式中声明。 忽略函数的返回值。 行尾缺少分号。 注释与代码冗余

int input(int);
int validate(int);
int main(void)
{
    input(int x)
    validate(int y)
int input(int a)
{
int validate(int b)
{
从输入返回的值应该传递给validate,而不是一个新的未初始化变量。 变量不能在函数调用表达式中声明。 忽略函数的返回值。 行尾缺少分号。 对

// function prototype for the function input
    //calling the function input
// Function definition for input
    printf("Enter the int value of r\n");
#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;
}
注释与代码冗余

int input(int);
int validate(int);
int main(void)
{
    input(int x)
    validate(int y)
int input(int a)
{
int validate(int b)
{
参数a是不必要的

    int r;

// function prototype for the function input
    //calling the function input
// Function definition for input
    printf("Enter the int value of r\n");
#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;
}
小调:在没有要格式化的内容时使用puts

    scanf("%d",&r);

缺少返回r

注释与代码冗余

int input(int);
int validate(int);
int main(void)
{
    input(int x)
    validate(int y)
int input(int a)
{
int validate(int b)
{
函数没有返回值,因此应为void validateint b

不必要的变量

    if(r>= 0 && r<= 100)
小调:再一次,放


正确。

此程序的几乎每一行都至少有一个错误

// function prototype for the function input
    //calling the function input
// Function definition for input
    printf("Enter the int value of r\n");
#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;
}
这是一个标准问题,有很多不正确的建议。最重要的是,只有//函数族可以用于将字符串转换为数字;永远不要使用atoi系列,因此我将给出一个完整的示例,说明如何正确编写这个程序,包括正确使用注释

#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, +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;
        }
        // if we get here, fgets might not have read the whole line;
        // drain any remainder
        if (!strchr(buf, '\n')) {
          int c;
          do c = getchar();
          while (c != EOF && c != '\n');
        }
        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;
}
注释与代码冗余

int input(int);
int validate(int);
int main(void)
{
    input(int x)
    validate(int y)
int input(int a)
{
int validate(int b)
{
函数签名不正确请参见函数体上的注释

#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");
    }
// function prototype for the function validate
//main function
注释与代码冗余

int input(int);
int validate(int);
int main(void)
{
    input(int x)
    validate(int y)
int input(int a)
{
int validate(int b)
{
函数签名不正确请参见函数体上的注释

#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");
    }
// function prototype for the function validate
//main function
注释与代码冗余

int input(int);
int validate(int);
int main(void)
{
    input(int x)
    validate(int y)
int input(int a)
{
int validate(int b)
{

// function prototype for the function input
    //calling the function input
// Function definition for input
    printf("Enter the int value of r\n");
#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;
}
注释与代码冗余

int input(int);
int validate(int);
int main(void)
{
    input(int x)
    validate(int y)
int input(int a)
{
int validate(int b)
{
变量不能在函数调用表达式中声明。 忽略函数的返回值。 行尾缺少分号。 注释与代码冗余

int input(int);
int validate(int);
int main(void)
{
    input(int x)
    validate(int y)
int input(int a)
{
int validate(int b)
{
从输入返回的值应该传递给validate,而不是一个新的未初始化变量。 变量不能在函数调用表达式中声明。 忽略函数的返回值。 行尾缺少分号。 对

// function prototype for the function input
    //calling the function input
// Function definition for input
    printf("Enter the int value of r\n");
#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;
}
注释与代码冗余

int input(int);
int validate(int);
int main(void)
{
    input(int x)
    validate(int y)
int input(int a)
{
int validate(int b)
{
参数a是不必要的

    int r;

// function prototype for the function input
    //calling the function input
// Function definition for input
    printf("Enter the int value of r\n");
#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;
}
小调:在没有要格式化的内容时使用puts

    scanf("%d",&r);

缺少返回r

注释与代码冗余

int input(int);
int validate(int);
int main(void)
{
    input(int x)
    validate(int y)
int input(int a)
{
int validate(int b)
{
函数没有返回值,因此应为void validateint b

不必要的变量

    if(r>= 0 && r<= 100)
小调:再一次,放


正确。

调用函数的方式完全错误。与其告诉你它们应该是什么,不如告诉你去读这本书。你的函数也没有返回值,并且忽略了输入参数。你
// function prototype for the function input
    //calling the function input
// Function definition for input
    printf("Enter the int value of r\n");
#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;
}

不能仅仅猜测C语法。实际上,您必须理解源代码中每一行的含义。您调用函数的方式是完全错误的。与其告诉你它们应该是什么,不如告诉你去读这本书。你的函数也没有返回值,并且忽略了输入参数。你不能仅仅猜测C语法。实际上,你必须理解源代码中每一行的含义。请解释1他们做错了什么,2你的代码如何改进。事实上,这对未来的读者不会有太大帮助。请解释1他们做错了什么,2你的代码是如何改进的。事实上,它对未来的读者不会有多大帮助。