C 将变长字符串数组读取为int

C 将变长字符串数组读取为int,c,arrays,string,int,scanf,C,Arrays,String,Int,Scanf,所以我试图从如下格式的文件中读取输入: 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 &l

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

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);
     }
   }
}
for(int i=0;i<5;i++){
如果(fgets(直线,最大长度,英寸)!=NULL){
printf(“\n%s\n”,第行);
整数长度=strlen(直线);
printf(“行=%d\n”,长度);
对于(int j=2;j

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

我建议您使用
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;

}
#包括
#包括
int main(){
char str[20]=“1 8 0 8 99”//或您的行
char*pt;
int numbers[10];//读取数字的数组
int指数=0,i;
数字[索引]=strtol(str,&pt,10);//十进制数字
索引++;
而(*pt!='\0')
{
数字[索引]=标准文本(第10页和第10页);
索引++;
}
for(i=0;i
for(int i=0;i<5;i++){
如果(fgets(直线,最大长度,英寸)!=NULL){
printf(“\n%s\n”,第行);
整数长度=strlen(直线);
printf(“行=%d\n”,长度);
国际莱恩大学;
sscanf(行“%*d%n”和len);
对于(int j=len;sscanf(第+j行,“%d%n”,&u,&len)==1;j+=len){
printf(“第[%d]行=%d\n”,j+1,u);//+1:一个空格
}
}
}
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
     }
   }
}