【问题标题】:Can I put a for loop inside scanf?我可以在scanf中放置一个for循环吗?
【发布时间】:2018-10-08 09:41:23
【问题描述】:

我想在一行中有未知数量的输入。例如,用户可以输入: “答案:1 2 3 4 5” scanf() 会将这五个数字存储到一个数组中。问题是程序不知道会有多少输入。

#include <stdio.h>
int main()
{
    int i;
    int input[4];
    scanf("ans: " for(i = 0, i < 3,i++){scanf(" %d", &input[i]);};
    return 0;
}

对不起,我对编码完全陌生,写这个的正确方法是什么?或者这是不可能的? 谢谢:)

【问题讨论】:

  • 你不能。对于这么少的值,为什么不直接使用scanf("ans: %d %d %d %d", &amp;input[0], &amp;input[1], &amp;input[2], &amp;input[3])?对于较大数量的值,请单独阅读"ans: "(如果您真的希望用户输入该值),然后对数字输入使用单独的循环。并且不要忘记检查scanf 返回的内容!
  • 您将 scanf 放在循环中,而不是相反。你是在问如何把赛道放在你的车里,而不是在问如何把你的车放在赛道上。如果您事先不知道会有多少输入,则通常首选 while 循环。
  • 什么会决定输入的实际数量?数组的大小?

标签: c loops for-loop scanf


【解决方案1】:

将fgets() 和sscanf() 与"%n" 一起使用

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(void) {
    char input[100];
    int arr[10];

    //fgets(input, sizeof input, stdin);
    strcpy(input, "1 2 42 56 -3 0 2018\n"); // fgets

    char *pi = input;
    int tmp, pp, i = 0;
    while (sscanf(pi, "%d%n", &tmp, &pp) == 1) {
        if (i == 10) { fprintf(stderr, "array too small\n"); exit(EXIT_FAILURE); }
        pi += pp;
        arr[i++] = tmp;
    }
    printf("got this ==>");
    for (int k = 0; k < i; k++) printf(" %d", arr[k]);
    puts("");
}

【讨论】:

    【解决方案2】:

    你问了这个问题。

    您可以通过将 scanf 放入循环中来实现您的期望。甚至您可以要求用户提供他想要输入的输入数。

    #include <stdio.h>
    int main()
    {
        int i;
        int input[4];
        printf("Enter the number of inputs you want to give : ");
        scanf("%d", &n);
        for(i = 0; i < n;i++)
        {
         printf("Enter the input number %d : ",i);
         scanf("%d", &input[i]);
        }
        return 0;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-04-17
      • 2011-10-27
      • 1970-01-01
      • 2014-01-12
      • 1970-01-01
      • 1970-01-01
      • 2020-08-04
      相关资源
      最近更新 更多