【问题标题】:reading variable length string arrays as ints将可变长度字符串数组读取为整数
【发布时间】:2014-06-06 01:34:01
【问题描述】:

所以我试图从格式如下的文件中读取输入:

0 3 4 1
1 2 4
2
3
4 2

我在这里写的一段代码:

for (int i = 0; i < 5; i++){
  if (fgets(line, MAX_LEN, in) != NULL){
     printf("\n%s\n", line);
     int length = strlen(line);
     printf("line = %d\n", length);
     for (int j = 2; j < length; j+=2){
        char a;
        a = line[j];
        int u = a - '0';
        printf("line[%d] = %d\n", j, u);
     }
   }
}

非常粗略,但可以处理上述一位数类型的输入,但是我需要它来处理两位数的值。我考虑过使用 sscanf() 但行输入可以包含任意数量的值,所以我不知道调用它多少次。这里的任何帮助都会很棒,因为我不知所措...谢谢!

【问题讨论】:

    标签: c arrays string int scanf


    【解决方案1】:

    我建议你使用strtol

    这是一个如何使用它的示例:

    #include <stdio.h>
    #include <string.h>
    
    int main() {
        char str[20]="1 8 0 8 99";  // or your line
        char *pt;
    
        int numbers[10];  // array to read the numbers
        int index = 0, i; 
    
        numbers[index] = strtol(str, &pt, 10); // decimal numbers
        index++;
    
        while(*pt !='\0' )
        {
            numbers[index] = strtol(pt, &pt, 10);
            index++;
        }
    
        for(i=0; i<index; i++) printf("%d ", numbers[i]);
        return 0;
    
    }
    

    本例中的输出将是:

    1 8 0 8 99

    现在我让你将strtol 集成到你的实际程序中,祝你好运:)

    【讨论】:

      【解决方案2】:
      for (int i = 0; i < 5; i++){
        if (fgets(line, MAX_LEN, in) != NULL){
           printf("\n%s\n", line);
           int length = strlen(line);
           printf("line = %d\n", length);
           int len, u;
           sscanf(line, "%*d%n", &len);
           for (int j=len;sscanf(line + j, "%d%n", &u, &len)==1;j+=len){
              printf("line[%d] = %d\n", j+1, u);//+1 : one space
           }
         }
      }
      

      【讨论】:

        猜你喜欢
        • 2011-10-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多