【问题标题】:How do I print out a sequence of answers using a for loop in C?如何使用 C 中的 for 循环打印出一系列答案?
【发布时间】:2016-10-06 23:46:42
【问题描述】:

这个问题可能有点模糊,所以请允许我详细说明。我的目标是根据用户输入计算下载速度。所以一个示例输出显示为here

所以我继续使用以下代码请求用户输入(这部分完全有效,但只是为了给你更大的图景)

#include <stdio.h>

int main(void) {

int minFileSize, maxFileSize, maxDLSpeed, minDLSpeed;
int time;


//first we get user input for minimum size and download speeds
printf("Enter a minimum file size: ");
scanf("%d", &minFileSize);
//after this condition is satisfied..
while (minFileSize <= 0 ) {
    printf("Invalid input. Try again: \n");
    scanf("%d", &minFileSize);

    while(getchar() != '\n' );                        //clears caches
}
//program continues
printf("Enter a minimum download speed (MB/s): ");
scanf("%d", &minDLSpeed);
while (minDLSpeed <= 0) {
    printf("Invalid input. Try again: ");
    scanf("%d", &minDLSpeed);

    while ( getchar() != '\n' );
}
printf("Enter a maximum file size (MB): ");
scanf("%d", &maxFileSize);
while (maxFileSize < minFileSize) {                   //maxFileSize can't be lower than minFileSize
    printf("Invalid input. Try again: ");
    scanf("%d", &maxFileSize);

    while (getchar() != '\n');
}
printf("Enter maximum download speed (MB/s): ");
scanf("%d", &maxDLSpeed);
while (maxDLSpeed < minDLSpeed) {
    printf("Invalid input. Try again: ");
    scanf("%d", &maxDLSpeed);

    while (getchar() != '\n');
}

while (getchar() != '\n') 只是清除缓存,以便我们可以继续下一个输入。

在获得用户输入后,我使用嵌套的 for 循环循环遍历最小文件大小一直到最大大小(因此它会在达到最大大小时停止,这取决于用户输入的内容) 然后对最小下载速度和最大下载速度做同样的事情。 那么每次循环迭代,它应该输出下载速度,即(文件大小/下载速度)所以i/j代表这个

这是我使用的循环

for (int i = minFileSize; i <= maxFileSize; i++)
{
    for (int j = minDLSpeed; j<= maxDLSpeed; j++) {

        time = i / j;     
    };
}

如果您已经阅读了这么多,谢谢!现在我的问题是如何以上面显示的格式打印输出,以便每次循环运行时,它都会根据文件大小和下载速度打印出正确的下载速度。

【问题讨论】:

  • 您的问题包含一个巨大的 sn-p,它最终是无关紧要的,但对于您真正需要做的事情仍然模棱两可。我不明白你的问题是什么 - 它只是在循环中打印一个整数吗? printf("%d\n", time); ?
  • 所以我的问题是在循环中打印出一个整数,但要连续打印,直到达到最大值。因此,如果我们的最小文件大小是 8 并且我们的最小下载速度是 9,它应该打印出那个输出(所以文件大小除以下载速度)然后循环到下一个;所以现在它的最小文件大小为 9,最小下载速度为 10,并在达到最大下载和文件大小输入(用户最初提供)时停止
  • 我还是不明白。这与在内部循环中调用 printf() 有什么不同?您的问题是关于打印还是关于循环条件的逻辑?
  • 我想我的问题与这两个有关。如果您查看@mhawke 的回复,它基本上接受用户输入并针对每个单独的下载速度和文件大小循环通过它,然后打印该特定值。所以文件大小 8 和下载速度 9 会给你 .89,然后你选择文件大小 9 和下载速度 10 并一直打印,直到你达到最大文件和下载速度(假设它们分别是 13 和 12 )

标签: c for-loop while-loop


【解决方案1】:

您的循环似乎是错误的方式。外部 for 循环应该是下载速度,内部循环应该是文件大小:

for (int dl_speed=minDLSpeed; dl_speed<=maxDLSpeed; dl_speed++) {
    printf("%6.2fMB/s |", (float)dl_speed);
    for (int file_size=minFileSize; file_size<=maxFileSize; file_size++)
        printf("%6.2fs", (float)file_size / dl_speed);
    printf("\n");
}

这应该给你表格的主体。您还需要添加标题行,您现在应该能够根据上面显示的代码计算出如何做到这一点。对于您的输入值,您将获得一个如下所示的表格:

输入最小文件大小:8 输入最低下载速度 (MB/s):9 输入最大文件大小 (MB):13 输入最大下载速度(MB/s):12 9.00MB/秒 | 0.89s 1.00s 1.11s 1.22s 1.33s 1.44s 10.00MB/秒 | 0.80s 0.90s 1.00s 1.10s 1.20s 1.30s 11.00MB/秒 | 0.73s 0.82s 0.91s 1.00s 1.09s 1.18s 12.00MB/秒 | 0.67s 0.75s 0.83s 0.92s 1.00s 1.08s

【讨论】:

  • 啊,我明白了,所以我们需要声明额外的整数 -- dl_speed & file_size -- 除了初始最大值以及速度和文件大小变量。我理解正确吗?
  • for 循环需要变量,是的。您可以随意命名它们,但是,使用描述性名称而不是 ij 会使代码更具可读性。
  • 两个问题...首先是你为什么在第一个for循环中使用6.2?其次是我最初的问题对你来说清楚吗?我正在尝试在此处获得有关提出问题的反馈(尽管这看起来很基本-事实证明,当您不完全知道该怎么做时,提出正确的问题是成功的一半!)我假设您能够相对遵循很容易,但它有很多文字,所以我想知道我是否能够展示我想要发生的事情。
  • 您的问题显示了您的努力,尽管StackOverflow - Help Center 停下来浏览主题总是值得的。只是一点用词,while (getchar() != '\n); 清除 输入缓冲区(例如 stdin)而不是 缓存
  • @HassanKamara:您应该阅读一下printf() 的格式字符串。 6.2f 指定 printf() 的相应参数应被视为具有 2 位精度的 float(即 f 部分)(即 .2 部分)。 6 指定字段宽度为 6 个字符,其中输出右对齐。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-06-05
  • 1970-01-01
  • 2022-11-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多