首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Strtok + If语句

Strtok + If语句
EN

Stack Overflow用户
提问于 2012-09-06 04:27:22
回答 2查看 1.3K关注 0票数 1

我是新来的,对我的程序感到头疼,问题是我需要从键盘上获得输入,然后使用strtok分隔它,但必须使用4种不同的大小写分隔标记,在每种情况下,我都需要打印结果并将其保存为字符串,如下所示:

代码语言:javascript
复制
input String : Label Instruction #50,Y; Label <with>

输出应如下所示:

代码语言:javascript
复制
Label: Label
Instruction: Instruction
Character [1]: #50
Character [2]: Y
Comentaries: Label <with>

此外,它还必须能够识别指令是否遗漏,如下所示:

代码语言:javascript
复制
Input String: adda
Output String
Label: -----
Instruction: adda
Character 1: -----
Comentaries: -----

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

代码语言:javascript
复制
#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);
}

//注释是我尝试使它工作的所有失败的尝试=(有人能帮我吗?

EN

回答 2

Stack Overflow用户

发布于 2012-09-06 04:28:35

代码语言:javascript
复制
char *token;
while (token != NULL){

token是在哪里初始化的?

然后:

代码语言:javascript
复制
if (delimiter != "\n"||"\t")

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

票数 9
EN

Stack Overflow用户

发布于 2012-09-06 07:32:33

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

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

2.delimiter为字符串,无法使用!=运算符进行比较。使用strcmp/strncmp

3.如果每次都分配相同的值,那么在每次迭代中检查定界符的意义是什么?我不确定你这样做的目的是什么。时,delimiter的值不会在调用strtok时更改。

4.在每次调用strtok之前,token应该通过NULL检查,因为您可以输入“错误”字符串。

5.它没有什么问题,但是当您可以简单地执行scanf时,为什么要使用fgets来从标准输入中获取输入

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12289236

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档