【问题标题】:After inputting an integer for a scanf() function, code does not continue?为 scanf() 函数输入整数后,代码无法继续?
【发布时间】:2020-03-17 14:09:01
【问题描述】:

我的目标是创建一个程序来检查特定位(由用户输入)是否设置为硬编码整数(在本例中为 159)。这段代码可以编译,但是当我输入我想要的整数时,控制台会停顿大约一秒钟,然后退出程序而没有错误消息。没有执行任何 printf() 函数,因为在控制台退出之前不会在控制台上打印任何其他内容。我是 C 的新手,所以我需要一些帮助。

#include <stdio.h>

int main() {
    int x = 159;
    int position = 1;

    scanf("%d", position);

    if (position == 0) {
        position = 1;
        printf("if");
    }
    else {
        for (int i = 0; i < position; i++) {
            position *= 2;
        }
        printf("else");
    }

    printf("%d", position);

    if ((x & position) != 0) {
        printf("true");
    }
    else {
        printf("false");
    }
}

【问题讨论】:

  • 请仔细阅读您关于scanf 及其预期论点的书籍或教程。您需要将 指针 传递给变量。
  • 你为什么要使用scanf呢? int main(int argc, char **argv) { int position = argc &gt; 1 ? strtol( argv[1], NULL, 10) : 1;... 学习 C 的人的良好经验法则:在您理解该语言之前不要使用 scanf。它不适合新手。

标签: c printf scanf


【解决方案1】:

scanf function 采用 address 的变量像这样的scanf("%d", &amp;position);

本身不是变量。

它会将输入的值放入该地址,因此您需要将&amp; 添加到您的scanf

甚至在那之后。除非您的职位是0,否则此代码将永远无法工作:

    else {
        for (int i = 0; i < position; i++) {
            position *= 2;
        }
        printf("else");
    }

这是一个不定式循环。它将一直执行,直到position 变得如此之大以至于int 没有足够的空间来存储它,所以position 成为一些不合逻辑的数字,例如未初始化的变量。

【讨论】:

  • 谢谢,这真的很有帮助。至于不定式循环,我知道我绝不能将参数变量放入 for 循环本身,但是我也是个白痴。感谢您的时间! :)
  • @MartinKiryakov 随意。无需感谢。如果真的对你有帮助,请采纳答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-07-24
  • 2023-03-10
  • 2015-12-31
  • 1970-01-01
  • 1970-01-01
  • 2021-05-27
  • 1970-01-01
相关资源
最近更新 更多