用C语言编程时,是否可以使用用户输入值设置const
?
如果是这样,怎么样?
答案 0 :(得分:8)
为什么不呢?
void some_function(int user_input)
{
const int const_user_input = user_input;
...
return;
}
int main (void)
{
int user_input;
scanf("%d", &user_input);
some_function(user_input);
return 0;
}
答案 1 :(得分:6)
你可以比Dadam的答案更直接地拥有它。 (通常我会把它放在评论中,但是直接将它放在代码中更容易。)
int get_user_input(void)
{
int user_input;
scanf("%d", &user_input);
return user_input;
}
int main(void)
{
int const user_input = get_user_input();
...
return 0;
}
答案 2 :(得分:1)
是的,可以。
#include <stdio.h>
int main()
{
printf("enter your number : ");
const int i = scanf("%d",&i)*i;
printf("%d",i);
}
让我解释一下这段代码是如何工作的。
首先,您应该知道scanf()
函数返回的integer
值等于从用户那里读取的项数。
例如:
1)scanf("%d",&a);
该语句返回值1,因为它只读取一项。
2)scanf("%d %d",&a,&b);
该语句返回值2,因为它读取了两个整数a
和b
。
类似地,当我们将scanf("%d",&i)*i
分配给i
时,其值将乘以i
的值(我们将其作为输入给出)。因此您得到的值为i
。
答案 3 :(得分:0)
链接器通常在只读空间(如代码空间)中定位全局const,因此以后无法更改
请参阅有关本地const的评论
答案 4 :(得分:0)
除了其他答案(都说不),你可以做一些丑陋的事情,比如
static const int notsoconst = 3;
scanf("%d", ((int*) ¬soconst));
但是这可以编译,但它可能会在运行时崩溃(并且在C语言规范中是undefined behavior),因为notsoconst
将被放入只读段(至少与GCC一起)在Linux上。)
即使可行,我也不建议以这种方式编码。即使您的实现没有将常量放在某个只读段中,也允许编译器期望const
永远不会改变(如语言标准中所指定的),并且允许使用此假设进行优化。
答案 5 :(得分:-1)
const变量C在技术上是只读的。所以无法从用户输入
设置它答案 6 :(得分:-1)
不,const在编译时强制执行。您需要采取自己的措施在运行时强制执行const。