gpt4 book ai didi

c - C 中的预期表达式错误

转载 作者:行者123 更新时间:2023-11-30 18:25:47 25 4
gpt4 key购买 nike

我正在尝试创建两个函数。第一个函数接受用户输入的整数,直到它们在 0 到 100 之间。秒函数将验证显示到 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");
}

最佳答案

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

这是一个标准问题,有很多不正确的建议(最重要的是,只有 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, +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;
}
<小时/>

继续阅读原始程序的逐行挑剔。

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

次要:再次看跌

}

正确。

关于c - C 中的预期表达式错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22764426/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com