是否可以使用用户输入设置const?

时间:2011-11-08 09:20:40

标签: c constants const user-input

用C语言编程时,是否可以使用用户输入值设置const? 如果是这样,怎么样?

7 个答案:

答案 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,因为它读取了两个整数ab

类似地,当我们将scanf("%d",&i)*i分配给i时,其值将乘以i的值(我们将其作为输入给出)。因此您得到的值为i

答案 3 :(得分:0)

链接器通常在只读空间(如代码空间)中定位全局const,因此以后无法更改

请参阅有关本地const的评论

答案 4 :(得分:0)

除了其他答案(都说不),你可以做一些丑陋的事情,比如

static const int notsoconst = 3;
scanf("%d", ((int*) &notsoconst));

但是这可以编译,但它可能会在运行时崩溃(并且在C语言规范中是undefined behavior),因为notsoconst将被放入只读段(至少与GCC一起)在Linux上。)

即使可行,我也不建议以这种方式编码。即使您的实现没有将常量放在某个只读段中,也允许编译器期望const永远不会改变(如语言标准中所指定的),并且允许使用此假设进行优化。

答案 5 :(得分:-1)

const变量C在技术上是只读的。所以无法从用户输入

设置它

答案 6 :(得分:-1)

不,const在编译时强制执行。您需要采取自己的措施在运行时强制执行const。