【问题标题】:Using a variable to define other variable before taking it as input在将变量作为输入之前使用变量定义其他变量
【发布时间】:2021-12-23 00:00:58
【问题描述】:

在下面的代码中,我最初定义了 n 和 k,然后如果我在使用 cin 将 k 作为输入之后将 n 定义为 k/2,则代码是成功的,但如果我之前定义 n=k/2 而不是这个cin 函数我得到一个无限循环作为输出?请说明为什么在下面或之后定义 cin 函数会影响输出。

#include <iostream>
using namespace std;
int main () {
cout<< "how many asterisks you want in the middle column:";
int n,k;
// n=k/2 ; 
cin>>k;
// n=k/2;

//some code involving n
return 0;
 }

【问题讨论】:

    标签: c++ variables infinite-loop


    【解决方案1】:

    语句的顺序有所不同:

    int k = 2;
    int n = k/2;
    k = 4;
    

    不同于

    int k = 2;
    k = 4;
    int n = k/2;
    

    在第一种情况下,你得到n = 1,在第二种情况下,你得到n = 2。这真的不应该让你感到惊讶!如果确实如此,您可能需要在处理循环之前修改您的编程基础知识:)

    其他:

    • 永远不要使用using namespace std;。不这样做,但专门只导入您需要的东西会在以后为您节省 很多 时间,调试非常奇怪的问题(我不知道为什么仍然教这个):using std::cin;using std::cout; 可能更长,但更好,因为您知道自己在名称空间中得到了什么!
    • 正确缩进您的代码。是的,您的编辑器有一个功能,如果没有,请使用更好的编辑器(这些东西真的会有所不同,尤其是对于初学者来说,因为它们可以帮助您更轻松地发现小错别字!)。许多初学者喜欢 Code::blocks 作为编辑器,因为它易于设置且性能良好,其他人则喜欢功能更强大的 VS Code。

    【讨论】:

    • 在您给出的示例中,顺序很重要,但我没有给 k 任何值,最初只是定义为整数,然后将 n 声明为 k/2,然后是来自用户的 k 值,我在其中得到一个无限循环,那么顺序不应该没有用,在这里给出相同的结果吗?
    • 不,不应该。您没有明确地给它一个值的事实不会改变语义!每一行都会自行执行。 n = k/2 没有说“n 将在 k 更改时更改其值”;它说“n 根据k当前 值获取k/2 的值”,仅此而已!如前所述,您可能真的需要在这里回归基础。
    • 是的,正如马库斯所说,顺序总是很重要,所以当 k 没有值时,你说 n 等于 k/2(还)我猜你认为 c++ 可以看到你'稍后会给 ka 值,但这不是它的工作原理。
    • 感谢您的帮助,我知道了。
    猜你喜欢
    • 1970-01-01
    • 2014-11-13
    • 1970-01-01
    • 2014-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-01
    • 1970-01-01
    相关资源
    最近更新 更多