【问题标题】:Program flow of displaying output in reverse反向显示输出的程序流程
【发布时间】:2014-01-20 02:34:35
【问题描述】:

1.我有这个用 C 语言编写的示例程序,它接受用户的正输入并在用户输入负数时停止。它最多接受十个输入。然后它以相反的顺序显示结果。我想知道这是怎么发生的,因为当我尝试映射它时 c 的值为负数,第二个循环只有在满足条件 (c>=0) 时才会起作用。
例如,如果我只输入一个正数,然后我将输入一个负数。

input[0]=2     
i=0+1    
c=1-2

input[1]=-4
i=1+1    
c=2-2       

num=2*input[-1]?

    #include<stdio.h>

int main()  
{    
        float in;    

    float input[10];
    int i=0;
    int c;

    printf("Please input a number:");
    do{ scanf("%f", &in);
            input[i] = in;

            i=i+1;

            if(i>10)
                break;

            c=i-1;      
    }while(in>=0);

    do{     float num;
            num= 2*input[c];
            printf("Input = %.2f.  Num= %.2f.\n", input[c], num);

            c=c-1;
    }while(c>=0);

    return 0;
}    

使用 do-while 代码的输入:
2
3
-4 输出:
输入:3.00 输出:6.00
输入:2.00 输出:4.00

  1. 当我尝试使用 for 循环实现它时,它在 gcc 中编译,但当我尝试执行它时显示 segmentation fault (core dumped)

    #include<stdio.h>
    

    int main() {漂浮; 浮点输入[10]; int i,c;

    printf("Please input a number:");
    
    for(i=0; in>=0; ){
        scanf("%f", &in);       
        input[i] = in;
        i=i+1;      
        if(i==10)
            break;      
        c=i-2;
    }
    
    for(; c>=0;){
        float num;
        num= 2*input[c];
        printf("Input = %.2f.  Num= %.2f.\n", input[c], num);
        c=c-1;
    }
    
    return 0;
    

    }

【问题讨论】:

  • 对于初学者,您的第一个 for-loop 正在调用未定义的行为。您使用条件表达式评估in,而无需在第一次迭代之前分配或初始化其值。我不知道你为什么要这样做:c=i-2;。而且...您从不检查scanf() 的返回结果,因此无法确定它实际上有效
  • 用'input[i]'替换'in>=0',它只接受1个输入而不管符号。在上面的代码中使用do-while c=i-2 用于反转输出,但我不知道它是如何工作的,因为当我尝试将它映射出来时,c 是负数。使用 do-while 的代码已经运行。
  • 这也好不到哪里去。 input[] 也未初始化。坦率地说,我仍然不知道这是要做什么。这是否应该从用户那里获取一个浮点列表,并且在达到 10 个条目或负输入数字时,打印数字以相反的顺序成功输入?如果是这样,你做的比你需要的要困难得多。(See it live)。如果不是,则需要更多解释(至少对我而言)。
  • 我编辑了这篇文章。使用 for-loop 的代码应该显示与使用 do-while 的第一个代码相同的输出。当输入为负数时停止,达到 10 个输入。
  • 您的 for 循环版本在 Windows 上为我运行。但仍然存在您在版本中遇到的问题。

标签: c string loops


【解决方案1】:

I'm wondering how does that happen because when I try to map it the value of c is negative

当我尝试使用2-4 映射它作为我得到的输入时,我不认为 c 确实是负数。

当你输入2;
它使input[i] = 2i 等于 0)然后 i 递增到 1。
然后它生成c = i - 1c = 1 - 1c = 0
没有退出,因为in &gt;= 0 (2)。

当你输入-4;
i 使input[i] = -4i 等于 1,c 等于 0)然后在 i 递增到 2
然后它生成c = i - 1c = 2 - 1c = 1
这次退出是因为 in &lt; 0 而不是 in &gt;= 0

do{ scanf("%f", &in);
        input[i] = in;

        i=i+1;

        if(i>10)
            break;

        c=i-1;      
} while (in >=0)

【讨论】:

    猜你喜欢
    • 2011-11-14
    • 1970-01-01
    • 2022-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-20
    • 2018-09-07
    相关资源
    最近更新 更多