输入到字符串数组不会显示?

时间:2016-09-07 23:19:06

标签: c for-loop format

我在C中,我应该将数字输入(不知道有多少)格式化为一列而不将它们存储到整数数组中。我无法弄清楚为什么我的代码不会读取输入并输出它。请帮忙。

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

int main() {
    int i;
    char *nums[400];

    for (i=0; i<nums; i++) {
        scanf(nums[i]);
        printf( "%.*s", 3, nums[i] );
    }
    return 0;
}

2 个答案:

答案 0 :(得分:0)

你有一个包含400个指针的数组,但你从未初始化它们。相反,您可以声明一个二维数组:

char nums[400][4];

然后您尝试使用nums作为for循环的限制。你真正想要的是nums中的元素数量,即sizeof(nums)/sizeof(nums[0]);或者您可以定义一个指定数组大小的宏。

接下来,您将格式字符串参数省略为scanf()

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

#declare SIZE 400

int main()
{

  int i;
  char *nums[SIZE][4];

  for(i=0; i<SIZE; i++){

    scanf("%3s", nums[i]);
    printf( "%.*s", 3, nums[i] );    
  }
  return 0;
}    

答案 1 :(得分:0)

由于Baramar正确而彻底地解释了您的主要问题,我想我可能对您的问题有不同的理解。你想要一个给定的数字字符串,例如:2134567896543245678并将其打印在一个列中,整齐地形成三个数字的行,每个都是这样的:

213
456
789
654
324
567
8

没有间断的整数数组。

这可以像例如:这个

那样完成
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define BUFFER_SIZE 512

int main()
{

  int res;
  // for the scanf input, set all to '\0'
  char buffer[BUFFER_SIZE + 1] = { '\0' }, *idx;
  size_t len, i;

  // restrict max-size to BUFFER_SIZE
  res = scanf("%512s", buffer);
  if (res != 1) {
    exit(EXIT_FAILURE);
  } else {
    if (strcmp(buffer, "exit") == 0) {
      exit(EXIT_SUCCESS);
    }
    // TODO: check if the buffer contains all digits
    len = strlen(buffer);
    idx = buffer;
    for (i = len; i >= 3; i -= 3, idx += 3) {
      printf("%.3s\n", idx);
    }
    // last entries, if any
    if (*idx != '\0') {
      printf("%s\n", idx);
    }
  }
  exit(EXIT_SUCCESS);
}

如果您得到一行中的实际整数,例如:12 3123 23478 34 5456 567456 567 678,您可以使用类似的内容:

修改

在OP评论使用浮点后,我将代码更改为接受表单输入:

24722.319352                51433.662233
     56087.991042             49357.684934  67875.375848      68421.563197

54521.615295

22744.470483

38097.001461    80878.250982
92131.575748                7217.137271
20750.671365 7620.695008 37118.391541   28655.609469    46885.110202    87114.202312
46462.577299








20557.716648

代码:

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

#define MAXNUM 400
int main()
{
  int res;
  int i = 0, m;
  // input and two temporary variables
  double in, in1, in2;

  for (m = 0; m < MAXNUM; m++) {
    res = scanf("%lf", &in);
    if (res != 1) {
      break;
    } else {
      switch (i) {
        case 0:
          // set value of first temporary variable to input
          in1 = in;
          // increment indicator indicating position in output row
          i++;
          break;
        case 1:
          in2 = in;
          i++;
          break;
        case 2:
          // print the three numbers and a newline
          fprintf(stdout, "%f %f %f\n", in1, in2, in);
          // reset counter
          i = 0;
          break;
      }
    }
  }
  // if there are still numbers, print them
  if (i != 0) {
    if (i == 1) {
      fprintf(stdout, "%f\n", in1);
    } else {
      fprintf(stdout, "%f %f\n", in1, in2);
    }
  }
  exit(EXIT_SUCCESS);
}

尝试

 $ gcc-4.9 -O3 -g3  -W -Wall -Wextra  -std=c11 sc.c -o sc
 $ ./sc < floatin 
 24722.319352 51433.662233 56087.991042
 49357.684934 67875.375848 68421.563197
 54521.615295 22744.470483 38097.001461
 80878.250982 92131.575748 7217.137271
 20750.671365 7620.695008 37118.391541
 28655.609469 46885.110202 87114.202312
 46462.577299 20557.716648

如果输入少于400个条目,则需要以EOF结束ctrl+d,这可以在大多数带有-1的Unix shell中触发,或者设置一个条目来结束条目,例如:undefined如果你只有正数并检查它是否突破循环。如果您提交上述示例中的文件,则会自动生效。