![](/img/trans.png)
[英]How to input n strings in C (n is entered by the user) without allocating n spaces?
[英]How to define a variable “N” type in C when N it is an input to C and its also defined by an input function( N will prompt the user for input)
我对编程还是很陌生,对 C 编程还是很陌生,所以如果我的问题看起来很荒谬,请原谅我。
我正在学习函数和 function 调用,我正在尝试跟随讲师正在做的事情,但有一点补充。 导师做了以下事情:
我在尝试着:
我正在使用的 C(c99) 有一个库 cs50.h(来自在线课程 cs50),它提供了获取 integer 输入的代码。 经过搜索和尝试后,我已成功完成如下:
包含 cs50 库后 int N = get_int("多少咳嗽") 咳嗽 (N)
还有咳嗽(get_int(“咳嗽多少次”))
我只是想知道为什么我不能在 C 中成功使用以下代码而不会出错。 为什么不能从 function 生成 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("cough\n");
}
}
感谢您阅读长篇故事并提供指导。
我只是想知道为什么我不能在 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("cough\n");
}
}
请注意,您的printf
打印一个常量字符串,因此您可以将其替换为puts("cough");
这有点快,因为在这种情况下printf
搜索“%”一无所获
你可以试试这个,但我没有使用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("cough\n");
}
}
当您在 C 中编写程序时,您只能使用之前定义的标识符......或者,当然,当您定义它们时。
因此,让我们逐行处理您的代码
void cough(int N);
void
已定义:语言关键字
cough
,这里是(暂时)定义的
int
已经定义:一个语言关键字N
它被(暂时)定义在这里。 此定义在下一个右括号之前有效,因为它是一个参数定义
int main(void) {
main
在这里定义
cough(N);
cough
是(暂时)定义的,所以没关系:编译器知道它是一个 function,以前的暂定定义和实际定义不能改变它。 N
OOPS,,: 之前未定义,不是关键字,编译器因错误而停止:)
不过,您可以将cough()
定义为不使用 arguments
#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("cough\n");
}
}
您需要在main
中定义N
(顺便说一下,它完全独立于N
in cough
。例如:
int main(void)
{
int N = 5;
cough(N);
{
作为替代方案,您可以使用cough(5)
或将N
定义为全局。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.