问题描述
我想做的是询问某人的名字,然后存储它,以便可以将其用于不同的脚本。这是我到目前为止所拥有的。
main.c
#include <stdio.h>
#include "functions.h"
int main()
{
printf("welcome to the dungeon crawler.\n");
//ask for the name//
printf("please state your name: ");
char name[100];
scanf("%s",name);
printf("hello %s.\n",name);
main2();
return 0;
}
main2.c
#include <stdio.h>
#include "functions.h"
int main2()
{
printf("%s\n",name);
return 0;
}
functions.h
#ifndef FUNCTIONS_H_INCLUDED
#define FUNCTIONS_H_INCLUDED
int name;
#endif // FUNCTIONS_H_INCLUDED
当我尝试运行它时,main2说(空)。
解决方法
主声明
char name[100];
声明了一个在main之外尚不存在的局部变量。
此声明在functions.h
int name;
声明类型int
的全局变量,该变量初始化为零。
您有两种选择。
函数main2
的参数类型为char *
或const char *
int main2( const char *name );
(将函数声明放在标题functions.h
中)
将被称为
main2( name );
或删除全局变量
int name;
在标题functions.h
中,而不是移动本地声明
char name[100];
从标头中的模块main.c
声明为
extern char name[100];
在文件作用域的模块之一中,放置变量声明,例如
char name[100];
在任何情况下,函数main2
的声明都必须放在functions.h
中。
当我尝试运行它时,main2说(空)。
因为您没有向该函数传递任何参数。
您应该使用一些描述性名称,而不要使用main2
。应该只有一个main
,其他任何函数都应具有描述性名称,以描述其功能。例如:
void printit(const char * string)
{
printf("%s\n",string);
}
然后从您的主设备开始,将name
传递给该函数:
printit(name);
作为旁注,您应该初始化char缓冲区,并确保您的scanf
读取的字符不超过应读取的字符:
char name[100] = "";
scanf("%99s",name);