1

我是新来的,我对我的程序感到头疼,问题是我需要从键盘获取输入,然后使用 strtok 将其分隔,但必须使用 4 种不同的情况来分隔令牌,并且在每种情况下我都需要打印结果并将其保存到这样的字符串中:

input String : Label Instruction #50,Y; Label <with>

输出应如下所示:

Label: Label
Instruction: Instruction
Character [1]: #50
Character [2]: Y
Comentaries: Label <with>

如果像这样错过了一条指令,它还必须能够重新调整:

Input String: adda
Output String
Label: -----
Instruction: adda
Character 1: -----
Comentaries: -----

我的代码可以接受第一个和正确的指令,但是当我在第二个输入中输入不正确的指令时,它会忽略它并像第一次尝试一样继续,有时只是添加,我尝试使用 if 能够将每个标记与其分隔符分开但是每次我编译它时,它都会忽略 if 语句,无论我给它什么参数我不知道还能做什么这是我的代码

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdbool.h>
#include <ctype.h>
int main() {     char word[256];
    fgets(word,256,stdin);
char *token;
while (token != NULL){
            char delimiter[]="\n , ;";
            token=strtok (word,delimiter);
            //if(token != "\n")            //{
            //char delimiter[]="\n , ;";
//token=strtok (word,delimiter);
//if (delimiter != " "||"\t" || "_")
            printf("Label \"%s\"\n", token);
token = strtok (NULL, "\n , ;");   //(NULL, "_,.-")//}
            //token=strtok (word,delimiter);            //}
//printf("Label ----------\n");
if (delimiter != "\n"||"\t")//{
            printf("Instruction \"%s\"\n", token);
token = strtok (NULL, "\n , ;");   //(NULL, "_,.-")//}
printf("Character \"%s\"\n", token);
token = strtok (NULL, "\n , ;");   //(NULL, "_,.-")
printf("Character 2 \"%s\"\n", token);
token = strtok (NULL, "\n , ;");   //(NULL, "_,.-")
printf("Comentaries \"%s\"\n",token);
token = strtok (NULL, ";");
//            printf("Character 2\"%s\"\n", token);
//           token = strtok (NULL, "\n , ;");   //(NULL, "_,.-")
token = NULL;}
//token = NULL;
//printf("Comentaries \"%s\"\n", token);
//token = NULL;
return(0);
}

// 评论是我尝试使其工作的所有失败尝试=(有人可以帮助我吗?

4

2 回答 2

9
char *token;
while (token != NULL){

在哪里token初始化?

然后:

if (delimiter != "\n"||"\t")

您只是在比较if控制表达式中的指针:使用strcmp函数来比较字符串。

于 2012-09-05T20:28:35.123 回答
0

我可以看到您的代码存在各种问题,如下所示:

1.您的while循环基于token未初始化的。最好使用do/while.

2.delimiter是一个字符串,不能使用!=运算符进行比较。使用strcmp/strncmp.

3.每次迭代时检查分隔符的意义何在每次都分配相同的值?我不确定你这样做是为了达到什么目的。AFAIK,delimiter调用strtok.

4.token每次调用前都应通过 NULL 检查,strtok因为您允许输入“错误”字符串。

5.这没什么问题,但是fgets当你可以简单地做一个时,为什么确切地用于从标准输入中获取输入scanf

以上希望能解决你的问题。

于 2012-09-05T23:32:32.963 回答