【问题标题】:Loop is running more than specified in C? Why? [closed]循环运行超过 C 中指定的?为什么? [关闭]
【发布时间】:2016-06-16 11:56:49
【问题描述】:

如果我输入数字 5,这个循环必须运行 5 次,但它运行了 6 次。问题是什么?

 int main(){
        int i, *arr, size;
        printf("Please enter the Number: ");
        scanf("%d ",&size);
        arr = (int*) malloc(size * sizeof(int));
        for(i = 0; i < size; i++){
            scanf("%d ", &arr[i]);
        }
 }

【问题讨论】:

  • 你在循环之前检查过size的值吗?
  • 尝试在循环 scanf 中删除 %d 之后的空间。

标签: c loops scanf


【解决方案1】:

去掉这里的空格:

这个:

 scanf("%d ",&arr[i]);
          ^

应该是:

 scanf("%d",&arr[i]);

【讨论】:

  • 是的,它正在工作。但问题是什么?
  • scanf有关,比较复杂。暂时不要打扰。
  • 请您给我来源,以便我可以去阅读?我很想知道。@Michael Walz
  • @Muralikrishna *scanf 格式字符串中的空白字符指示*scanf 读取并丢弃任意数量的空白字符(如果有)直到第一个非空白字符乙>。所以,你的scanf,在第五次迭代之后,等待一个非空白字符,如上面粗体部分所说。
  • @Muralikrishna 在我之前的评论中单击“scanf”。这将打开一个完整的 scanf 文档页面。
【解决方案2】:

我也遇到了类似的问题。为了使它完美,请删除 循环中 %d 之后的空格。它应该工作。可能是scanf 的某些属性。

int main(){
        int i, *arr, size;
        printf("Please enter the Number: ");
        scanf("%d",&size);// Note the change here
        arr= (int*) malloc(size * sizeof(int));
        for(i= 0;i < size;i++){ 
            scanf("%d",&arr[i]);
        }
    }

【讨论】:

  • 但是有什么问题呢?你能解释一下吗?
  • @Cool Guy 有人编辑了代码。现在它是正确的。
【解决方案3】:

从循环中使用的scanf() 格式字符串中删除尾随空格。

它会导致 scanf() 在读取 int (%d) 后丢弃所有空格,直到找到不是空格的内容。在循环的第五次迭代中,scanf() 读取int,并继续运行直到找到非空白。这给人一种需要再读取一个整数的错觉。

在最后一次调用scanf() 时,整数数据后面的任何非空白字符都会导致读取结束。

【讨论】:

    猜你喜欢
    • 2014-05-12
    • 1970-01-01
    • 1970-01-01
    • 2019-03-14
    • 1970-01-01
    • 2023-04-03
    • 1970-01-01
    • 2017-03-17
    • 1970-01-01
    相关资源
    最近更新 更多