【问题标题】:Warning: Comparison between pointer and integer in while loop警告:while 循环中指针和整数之间的比较
【发布时间】:2017-06-25 12:32:36
【问题描述】:

我正在编写一个程序,要求用户输入三天内的高温和低温。每天的高温必须大于低温,高温必须大于41,低温必须小于负-41。

我在第一天的输入之后写了一个while 语句,但是,我得到了指针和整数之间的错误比较。

我认为这与我使用集合整数有关,因此我尝试仅创建一个涉及高大于低的 while 语句,这导致程序正常工作,但我发现 while 循环被完全跳过.到目前为止,这是我的代码:

编辑:我开始明白我的while 循环哪里出错了。我相信这是因为我忽略了将数组中的值分配给高位和低位,并且如果用户满足while 循环的条件,我也忽略了重新运行代码。最初,我写了它,所以高低保持没有值,while 条件被困在一个无限循环中,因为我没有在满足条件后给它执行一些东西。

#include <stdio.h>
#define NUMS 3

int main (void)

{
int high[NUMS];
int low[NUMS];
int max = 40;
int min = -40;

    printf ("---===IPC Temperatur Analyzer ===---\n");

    printf ("Enter the high value for day 1: ");
    scanf ("%d", &high);

    printf ("Enter the low value for day 1: ");
    scanf ("%d", &low);

     while (high[0] > max || low[0] > min || high[0] < low[0]) {
           printf("Try again\n");

           printf ("Enter the high value for day 1: ");
           scanf ("%d", &high[0]);

           printf ("Enter the low value for day 1: ");
           scanf ("%d", &low[0]);

    }

    printf ("Enter the high value for day 2: ");
    scanf ("%d", &high[1]);

    printf ("Enter the low value for day 2: ");
    scanf ("%d", &low[1]);

    printf ("Enter the high value for day 3: ");
    scanf ("%d", &high[2]);

    printf ("Enter the low value for day 3: ");
    scanf ("%d", &low[2]);

return 0;

}

【问题讨论】:

  • high 和 low 是数组。在该比较中,它们被衰减为指针
  • 您需要一个变量来存储天数。然后更改所有 scanf 值以使用天数作为数组的索引:scanf("%d", &amp;high[day_num]);
  • 第 1 天使用 high[0],第 2 天使用 high[1],等等。例如,scanf ("%d", &amp;high[0]);while (high[0] &gt; max || ...)。您的代码将受益于使用循环而不是在第 1、2 和 3 天重复相同的代码。
  • 好的,我相信通过在 high 旁边添加类似 [0] 的内容,我将它分配给数组中的一个值?我最近才了解数组,所以我仍在尝试了解它们的功能。另外,我实施了上述建议并设法使 while 语句起作用,但是,我遇到了无限的“再试一次”字符串。为了防止这个错误,我将如何继续循环它?
  • 如果while-loop中的值没有改变,条件不会改变,循环会重复。有必要在循环中更改值(它们应该重新输入。)。

标签: c arrays while-loop int


【解决方案1】:

每天的高温必须大于低温, high 不得大于 41,low 不得小于 负-41。

我已经修改了你的代码并写了评论来理解:

#include <stdio.h>
#define NUMS 3

int main (void)

{
int high[NUMS];
int low[NUMS];
const int MAX = 41;
const int MIN = -41;

    printf ("---===IPC Temperatur Analyzer ===---\n");

    printf ("Enter the high value for day 1: ");
    scanf ("%d", &high[0]);       //address of first element

    printf ("Enter the low value for day 1: ");
    scanf ("%d", &low[0]);        //address of first element

    /*Check for User Input Value*/
     while (high[0] > MAX || low[0] < MIN || high[0] < low[0]) {

           printf("Try again\n"); 

           printf ("Enter the high value for day 1: ");
           scanf ("%d", &high[0]);

           printf ("Enter the low value for day 1: ");
           scanf ("%d", &low[0]);


    }

    printf ("Enter the high value for day 2: ");
    scanf ("%d", &high[1]);

    printf ("Enter the low value for day 2: ");
    scanf ("%d", &low[1]);

    //TODO-:/*Check for User Input Value*/

    printf ("Enter the high value for day 3: ");
    scanf ("%d", &high[2]);

    printf ("Enter the low value for day 3: ");
    scanf ("%d", &low[2]);
    //TODO-:/*Check for User Input Value*/

    //TODO-:/*Print the all value*/

return 0;

}

Todo 部分可以参考其他代码部分来完成。

【讨论】:

  • 对不起,我的意思是high不能大于41,low不能小于-41。但是,我唯一的问题是注册负值。似乎 -41 的 const int 没有注册为负整数,并且低值似乎也没有注册负输入,例如 -15。
  • 好的,我明白我的错误是什么了。我认为应该是低 [0] > MIN,因为 MIN 是-41,但似乎程序以相反的方式注册它。感谢您对莫汉的帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多