通过使用字符串避免32位溢出

时间:2017-07-02 16:44:04

标签: c cs50

UPD。所以我刚才意识到这实际上是非常愚蠢的想法,因为据我所知,没有办法改变消极的"溢出"数字到字符串,除非以某种方式禁止编译器显示" - "在数字之前。

这是我的第一个消息,所以请原谅我是否有错误。 所以,从第一周的讲座中获得了这个基本代码。

int main(void)
{
    int n = 1;
    for (int i = 0; i < 64; i++)
    {
        printf("n is %i\n", n);
        n = n * 2;
    }
}

我一直在考虑分配字符串n以便通过-2亿。

int main(void)
{
    int n = 1;
    for (int i = 0; i < 64; i++)
    {
        printf("n is %i\n", n);
        n = n * 2;
        if (n < 0){
            string n = get_string();
            printf("n is %s\n", n);
        }
    }
}

它会出错:declaration shadows a local variable。有没有办法来解决这个问题?感谢。

2 个答案:

答案 0 :(得分:1)

您可以执行以下操作以不显示此警告:

  • 请勿使用n两次声明变量,即使用任何其他名称重命名int nstring n
  • 请勿使用-Wshadow编译器切换。

答案 1 :(得分:0)

使用更大的类型可以避免32位溢出:unsigned long long保证至少有64位值:

#include <stdio.h>

int main(void) {
    unsigned long long n = 1;
    for (int i = 0; i < 64; i++) {
        printf("n is %llu\n", n);
        n = n * 2;
    }
    return 0;
}