为什么 puts 在以下代码中不起作用?
Why puts is not working in the following code?
#include <stdio.h>
#include <stdlib.h>
struct test
{
int id;
char name[20];
};
int main()
{
struct test t1;
t1.id=1;
fflush(stdin);
fgets(t1.name,20,stdin);
print((&t1.name));
print1(t1.id,&(t1.name));
}
void print(struct test *name)
{
puts(name);
}
void print1(struct test id,struct test *name)
{
printf("\n%d\n",id);
puts(name);
}
当我 运行 这个程序要求输入时
测试[进入]
输出出来
测试
1个
(然后程序终止)
为什么第一个 puts 起作用而第二个 puts 不起作用?是的,有发送完整结构的选项,但我想知道这里有什么问题。
你需要这个
void print(char *name)
{
puts(name);
}
调用需要
print(t1.name);
puts
需要char *
(或者实际上是const char *
)。
t1.name 具有数据类型 char *
同样
void print1(struct test id, char *name)
{
printf("\n%d\n",id);
puts(name);
}
和通话
print1(t1.id,& t1.name);
数组名退化为数组首元素地址。所以当t1.name
传给函数时,就变成了char数组的起始地址。
您的程序不工作有几个原因:
- 您正在调用缺少前向声明的函数 - 您应该在程序编译时看到警告。不要忽视他们
- 您的函数采用的参数类型不正确 - 您应该收到与各个字段相对应的类型,例如
void print1(int id, char *name)
或者你应该通过值或指针传递整个结构,即 void print1(struct test t)
一旦你解决了这两个问题,并确保你的程序编译时没有警告,并且启用了所有编译器警告,问题就应该解决了。
void print(struct test *name)
应该改为
void print(char name[]) // because you wish to print a null terminated array of characters.
print((&t1.name));
应该改为
print(t1.name); //name is the array you wish to print
#include <stdio.h>
#include <stdlib.h>
struct test
{
int id;
char name[20];
};
int main()
{
struct test t1;
t1.id=1;
fflush(stdin);
fgets(t1.name,20,stdin);
print((&t1.name));
print1(t1.id,&(t1.name));
}
void print(struct test *name)
{
puts(name);
}
void print1(struct test id,struct test *name)
{
printf("\n%d\n",id);
puts(name);
}
当我 运行 这个程序要求输入时
测试[进入]
输出出来
测试 1个 (然后程序终止)
为什么第一个 puts 起作用而第二个 puts 不起作用?是的,有发送完整结构的选项,但我想知道这里有什么问题。
你需要这个
void print(char *name)
{
puts(name);
}
调用需要
print(t1.name);
puts
需要char *
(或者实际上是const char *
)。
t1.name 具有数据类型 char *
同样
void print1(struct test id, char *name)
{
printf("\n%d\n",id);
puts(name);
}
和通话
print1(t1.id,& t1.name);
数组名退化为数组首元素地址。所以当t1.name
传给函数时,就变成了char数组的起始地址。
您的程序不工作有几个原因:
- 您正在调用缺少前向声明的函数 - 您应该在程序编译时看到警告。不要忽视他们
- 您的函数采用的参数类型不正确 - 您应该收到与各个字段相对应的类型,例如
void print1(int id, char *name)
或者你应该通过值或指针传递整个结构,即void print1(struct test t)
一旦你解决了这两个问题,并确保你的程序编译时没有警告,并且启用了所有编译器警告,问题就应该解决了。
void print(struct test *name)
应该改为
void print(char name[]) // because you wish to print a null terminated array of characters.
print((&t1.name));
应该改为
print(t1.name); //name is the array you wish to print