C 如何避免在调用函数时重置全局变量

C 如何避免在调用函数时重置全局变量,c,variables,global,C,Variables,Global,我是一个初学者,开始写一些简单的程序。 我想创建一个全局变量来维护我的记录编号,不幸的是,每次调用函数时,我的变量都重置为零。我查看了其他一些示例,比如人们使用static或volatile声明我的变量,我尝试了这两种方法,但仍然重置了我的值。请告知。谢谢 请看下面我的函数 int record_number; int file_number; int Record_Count(int record_correct); { if (record_correct) record

我是一个初学者,开始写一些简单的程序。 我想创建一个全局变量来维护我的记录编号,不幸的是,每次调用函数时,我的变量都重置为零。我查看了其他一些示例,比如人们使用static或volatile声明我的变量,我尝试了这两种方法,但仍然重置了我的值。请告知。谢谢 请看下面我的函数

int record_number;
int file_number;

int Record_Count(int record_correct);
{
   if (record_correct)
      record_number++;
   if (record_number == 100)
   {
      file_number++;
      record_number = 0;
   }

   return record_number;
}

正如其他人所评论的,看起来您并不是直接从编辑器粘贴代码,而是从头开始输入代码

也就是说,我怀疑你已经陷入了C语言最臭名昭著的陷阱之一,这个陷阱仍然偶尔会吸引专业程序员(我从80年代初就开始使用这种语言,现在仍然这样做)

转到原始代码,仔细查看粘贴为的行

if (record_number == 100)
它真的这么说吗

if (record_number = 100)
如果是这样,则每次调用函数时都会执行
If
语句,因为谓词(
record\u number=100
)首先将100赋值给
record\u number
,然后测试结果是否为非零(当然,
100
是),并采用
If
分支,将
record\u number
设置为零(并同时递增
file\u number

避免这种情况的方法是迅速养成编码习惯,然后坚持下去。始终以这种方式对常量的相等性比较进行编码:

if(100 == record_number)

然后,如果您将
==
错误键入为
=
,编译器将为您抛出一个错误。

我知道,不要使用全局变量。。。发布的代码不够。您必须在其他地方执行某些操作…可能需要展开代码段以显示这些“全局”变量的真实范围。声明它们时还应显式将它们初始化为零。@stevesliva,全局变量已初始化为0是的,您需要显示更多的代码,并且非常确定您在那里显示的内容将不起作用,因为您的函数声明中有分号。@AlterMann-我知道。不影响我的评论。第二个最受欢迎的陷阱是发布类似于故障代码的代码,而这应该是一个演示故障的示例。是的,但是如果OP对C来说确实是新手,那么这很可能是原因:)我们会看到的,建议对新手来说是好的。我同意,让我们看看。我对此投了赞成票,因为我想知道为什么这样做测试:
constant==variable