我仍然是编程新手,对C编程非常陌生,所以如果我的问题看起来很荒谬,请原谅我。
我正在学习函数和函数调用,我正在尝试遵循讲师正在做的事情,但需要一点补充。 讲师做了以下工作:
- 讲师定义了一个功能咳嗽--(空洞咳嗽(int N((
- 仅使用一行代码在 main 中调用函数
- 该程序在屏幕上打印出咳嗽的硬编码次数,即咳嗽(3(将打印咳嗽3次。
我正在尝试:
- 定义一个函数咳嗽 -- (void cough(int((
- 仅使用一行代码在 main 中调用函数 程序应在
- 屏幕上打印出咳嗽N次,但应在程序开始时出现提示(例如"咳嗽多少次?
我正在使用的 C(c99( 有一个库 cs50.h(来自在线课程 cs50(,它提供了一个获取整数输入的代码。 经过搜索和尝试,我成功地做到了以下几点:
包含 cs50 库后 int N = get_int("咳嗽多少次"( 咳嗽(N(
而且 咳嗽(get_int("咳嗽多少"((
我只是想知道为什么我不能在 C 中成功使用以下代码而不会出错。为什么不能从函数生成 N?
我得到的错误是---使用未声明的标识符"N">
void cough(int N);
int main(void)
{
cough(N);
}
void cough(int N)
{
N = get_int("How many coughs?n");
for (int i = 0; i < N; i++)
{
printf("coughn");
}
}
感谢您阅读长篇故事并提供指导。
我只是想知道为什么我不能在 C 中成功使用以下代码而不会出错。
使用未声明的标识符"N">
因为在
int main(void)
{
cough(N);
}
N在main中没有定义为局部变量,它也不是全局变量,因此您无法编译代码
但应该在程序开始时出现提示,例如"咳嗽多少次?
所以
N = get_int("How many coughs?n");
必须移动到主
最后你想要这样的东西:
void cough(int N);
int main(void)
{
cough(get_int("How many coughs?n"));
return 0;
}
void cough(int N)
{
for (int i = 0; i < N; i++)
{
printf("coughn");
}
}
请注意,您的printf
打印一个常量字符串,因此您可以将其替换为puts("cough");
,这更快一些,因为在这种情况下printf
搜索"%"没有任何内容
当你用 C 编写程序时,你只能使用以前定义的标识符......或者,当然,当你定义它们时。
因此,让我们逐行使用您的代码
void cough(int N);
void
已经定义:语言关键字cough
它在这里(暂时(定义int
已经定义:语言关键字N
它在这里(暂时(被定义。此定义在下一个右括号之前有效,因为它是参数定义
int main(void) {
main
在这里定义
cough(N);
cough
之前(暂时(定义过,所以没关系:编译器知道它是一个函数,之前的暂定定义和实际定义无法改变这一点。N
哎呀!!之前未定义,不是关键字,编译器停止并出现错误:)
不过,您可以定义cough()
不带参数
#include <stdio.h>
#include "cs50.h"
int cough(void);
int main(void)
{
cough();
}
void cough(void)
{
int N = get_int("How many coughs?n");
for (int i = 0; i < N; i++)
{
printf("coughn");
}
}
您需要在main
中定义N
(顺便说一下,这完全独立于cough
中的N
。 例如:
int main(void)
{
int N = 5;
cough(N);
{
或者,您可以使用cough(5)
或将N
定义为全局。
你可以试试这个,但我没有使用get_int()
void cough(int N);
int main(void)
{
int N = 0;
scanf( "%d", &N );
cough(N);
}
void cough(int N)
{
printf("How many coughs?n");
for (int i = 0; i < N; i++)
{
printf("coughn");
}
}