结构有问题。我该如何声明?我需要执行以下操作:
您的函数将返回一个整数。
- 您的函数应该只接受一个参数(数组(。
- 您的函数将询问用户将输入的字符数。然后,在你的里面 函数,您将检查此值是否大于或等于 70。如果值大于或等于 70,您将打印出一条错误消息并返回 1。否则,您将使用循环扫描字符 并返回 0。
#include <stdio.h>
struct info {
char name[70];
char lastname[70];
char address[70];
};
void printarray(char name[]) {
int i;
int number;
printf("How many characters will be inputted? n");
printf("It cannot be more than 70!n");
scanf("%d", &number);
printf("What is your name? n");
for(i=0; i<number; i++) {
scanf(" %c", &info.name[i]);
}
return;
}
int main() {
struct info name;
return 0;
}
struct info {
char name[70];
char lastname[70];
char address[70];
};
定义结构模板,而不是结构变量,因此不能使用scanf(" %c", &info.name[i]);
struct info
因为 是您定义的数据类型。
在main()
中,您定义了结构变量name
。
正如您在问题中所说,当number
>= 70
时,它应该打印错误消息并return 1;
但您没有检查错误。
最后,你从来没有打电话给printarray()
.
您可能希望这样做:
#include <stdio.h>
struct info {
char name[70];
char lastname[70];
char address[70];
};
void printarray(struct info var) {
int i;
int number;
printf("How many characters will be inputted? n");
scanf("%d", &number);
if (number >= 70)
{
printf("Number should be less than 70.n");
return 1;
}
printf("What is your name? n");
for(i=0; i<number; i++) {
scanf(" %c", &var.name[i]);
}
return;
}
int main() {
struct info name;
printarray(name);
return 0;
}
代码有几个缺陷:
-
程序应该接收一个 char 数组,而不是结构模板。
-
未设置将数字与
>= 70
进行比较的条件。 -
从未使用过函数
printarray(char[])
。 -
该函数
printarray()
不返回任何内容(即 void(,期望返回整数1
或0
是不可能的。 -
不需要函数最后一行中的
return
。 -
标识符
info
语法:scanf(" %c", &info.name[i]); // obviously an error
是类型名称,而不是结构
info
实例。
旁白:避免使用神奇的数字,当数字不会在任何地方更改时使用常量(例如MAX
在给定的程序中保存70
整数值(。
示例代码如下:
#include <stdio.h>
#define MAX 70
// struct template
struct info {
char name[MAX];
// ...
};
// function declaration
int print_array(info);
int main(void) {
info in;
int exit_code;
// passing a single argument
exit_code = print_array(in);
printf("nExit code was: %dn", exit_code);
return 0;
}
// function definition
int print_array(info i) {
int num;
printf("Enter a number (not >= 70): ");
scanf("%d", &num);
if (num >= 70) {
printf("The input exceeds the limit.n");
return 1;
}
for (int it = 0; it < num; it++)
i.name[it] = getchar();
printf("%sn", i.name);
// ...
return 0;
}
代码将输出:
Enter a number (not >= 70): 30
Hello world, how are you today? hope you're doing good!
Hello world, how are you toda // rest are truncated
Exit code was: 0