我试图创建两个函数。第一个函数接受来自用户的整数输入,直到它们在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");
}
答案 0 :(得分:2)
你的电话中有误导int
,他们需要去。
电话应该是:
x = input();
validate(x);
你不能将一个整数传递给一个函数,期望它在调用者的上下文中改变,而不是C的传值值语义如何工作。您应该从input()
返回数字,即其原型应为int input(void);
。
答案 1 :(得分:1)
您需要在main()
函数的每行代码末尾添加分号,并删除函数调用中的类型说明符。另外,不要忘记在某处声明变量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;
}
答案 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;
}