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: -----

私のコードは最初の正しい命令を受け入れることができますが、2 番目の入力のように間違った命令を入力すると、それは無視され、最初の試行のように時々実行されます。各トークンをデリミタで区切ることができるように 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.毎回同じ値が割り当てられている場合、繰り返しごとに区切り文字をチェックするポイントは何ですか? それを行うことで何を達成しようとしているのかわかりません。私の知る限り、 の値はdelimiterの呼び出しでは変更されませんstrtok

4. 「間違った」文字列を入力することが許可されているため、tokenすべての呼び出しの前に NULL チェックを通過する必要があります。strtok

fgets5.何も問題はありませんが、単純に実行できるのに、なぜ標準入力から入力を取得するために正確に使用されたのscanfですか?

上記で問題が解決することを願っています。

于 2012-09-05T23:32:32.963 に答える