【问题标题】:C scanf ignore second variable in loop [duplicate]C scanf忽略循环中的第二个变量[重复]
【发布时间】:2023-04-09 14:12:01
【问题描述】:
int main()
{
    float T[100];
    float *pt=T;
    float suma = 0, srednia, zmienna;
    int rozmiar;

    printf("How many numbers would you like to put in: ");
    scanf(" %d", &rozmiar);
    int dzielnik = rozmiar;

    printf("\n Enter the number: \n");
    for(int i = 0;i<rozmiar;i++)
    {
        printf("\n i = %d", i );
        scanf("%99f\n", &zmienna);
        *(pt+i) = zmienna;
    }

    return 0;
}

这是我的代码。这个想法很简单。我有一个数组;我想扫描要放入数组中的数字,然后将数字放入数组中。我不知道为什么,但scanf 忽略了我放入数组中的第二个变量。

如果我在第一个 scanf 中输入“2”,程序需要我提供 3 个变量。

我的输出应该是这样的:

How many numbers would you like to put in: 2 

Enter the number:

i = 0

2 (my number)

i=1

3 (my number)

但实际上是这样的:

How many numbers would you like to put in: 2 

Enter the number:

i = 0

1 (my number)

2 (my number)

i = 1

3 (my number)

【问题讨论】:

  • 从scanf中删除换行符,就像scanf("%99f", &amp;zmienna);
  • 如果您只使用%d%f,则无需担心换行符,前导空格会被过滤(%c 是另一回事)。但是%99f 中的99 应该实现什么?暂时保持简单。

标签: c


【解决方案1】:

您遇到的具体问题是scanf:输入\n 通常是个坏主意,因为输入换行符通常是您将一行字符发送到程序的方式。在printf 中大量使用'\n',在scanf 中使用“从不”。

这是我的修改版本。我删除了指针恶作剧,因为对数组的索引更简单更好,并且还初始化了您应该始终执行的数组:

#include <stdio.h>

int main() {
    float T[100] = {0}; // Used to not be initialized.
    float suma = 0, zmienna;
    int rozmiar;

    printf("How many numbers would you like to put in: ");
    scanf("%d", &rozmiar);

    printf("\n Enter the number: \n");
    for (int i = 0; i<rozmiar; i++) {
        printf("\n i = %d", i);
        scanf("%f", &zmienna);
        T[i] = zmienna;
    }

    return 0;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-07-14
    • 2021-10-17
    • 2016-07-21
    • 1970-01-01
    • 2014-10-27
    • 1970-01-01
    • 2020-01-31
    • 2022-01-04
    相关资源
    最近更新 更多