如何用C中的字符串中的数字分隔单词

时间:2013-03-27 21:40:10

标签: c string scanf

我有一个名为commands.txt的文本文件,其中包含一些命令,后跟一些参数。 例如:

STOP 1 2 4
START 5 2 1 8
MOVE
CUT 0 9

我想读取此文本文件中的每一行并打印类似这样的内容

STOP: 1 2 3
START: 5 2 1 8
MOVE:
CUT: 0 9

我用fgets阅读每一行然后我尝试使用sscanf但是不起作用。

char line[100]   // here I put the line
char command[20] // here I put the command
args[10]         // here I put the arguments



 #include<stdio.h>
    int main()
    {
    FILE *f;
char line[100];
char command[20];
int args[10];

f=fopen("commands.txt" ,"rt");
while(!feof(f))
{
fgets(line , 40 , f);
//here i need help
}
fclose(f);
return 0;
}

你能帮助我吗?

1 个答案:

答案 0 :(得分:0)

我认为你以错误的方式处理整件事。如果你想收集与参数分开的命令来对它们做一些事情,那么你需要使用ctype.h进行测试。

但是,对于您想要输出的方式,您实际上并不需要保存所有这些缓冲区。只需打印整个东西,在你需要的地方填充你的冒号。

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

    int main(){

      FILE *f;
      char *buf;
      buf = NULL;
      int i = 0, size;

      f=fopen("commands.txt", "r");
      fseek(f, 0, SEEK_END);
      size = ftell(f);
      fseek(f, 0, SEEK_SET);
      buf = malloc(size + 1);
      fread(buf, 1, size, f);
      fclose(f);

      for(i = 0; i < size ; i++){
        while(isalpha(buf[i])){
          printf("%c", buf[i++]);
        }
        printf(":");
        while(buf[i] == ' ' || isdigit(buf[i])){
          printf("%c", buf[i++]);
        }
        printf("\n");
      }
    return 0;
    }