比较从标准输入读取的字符?

时间:2013-12-04 10:40:38

标签: c char

我正在尝试从键盘读取一系列令牌。这些保存在char []中。令牌由空格分隔。使用stok()我可以拆分字符串,但我需要评估令牌以获取进一步的操作。我的代码:

char tString[50];

if (fgets(tstring, sizeof tstring, stdin)) {
            printf("%s", tstring);
            }



        char delimiter[] = " ";
        char *ptr;

        // initialisieren und ersten Abschnitt erstellen
        ptr = strtok(tstring, delimiter);

        while(ptr != NULL) {
            printf("Abschnitt gefunden: %s\n", ptr);
            // naechsten Abschnitt erstellen
            ptr = strtok(NULL, delimiter);
            if(ptr != '-'){
                puts("HIT MINUS!");
            }
        }

输入2 3后,我无法获得输出HIT MINUS - 作为我的输入线。谢谢你的帮助。

4 个答案:

答案 0 :(得分:2)

您正在比较指针

        if(ptr != '-'){

您想要比较值:

        if(ptr && *ptr != '-'){

在上一次迭代期间(最后一个令牌)ptr将为NULL,并且您不能取消引用NULL。所以我略微改变了条件。

答案 1 :(得分:2)

ptr是字符的指针。如果你想获得它指向的角色,使用*ptr

if (*ptr == '-') {
    puts ("HIT MINUS!");
}

你似乎也有相同的检查方式。我怀疑它应该是==(等于),而不是!=(不等于),所以我已将其更改为。

您可能还会在某个时候发现自己取消引用NULL指针,因此您可能也想要检查它:

if ((ptr != NULL) && (*ptr == '-')) {
    puts ("HIT MINUS!");
}

答案 2 :(得分:0)

在比较之前你必须取消引用指针 - 但也要检查那里的NULL。

此外,char tString[50];应为char tstring[50];才能进行编译。

#include <stdio.h>
#include <string.h>

int main (int argc, char **argv){
  char tstring[50];
  char delimiter[] = " ";
  char * ptr;
  if (fgets(tstring, sizeof tstring, stdin)) {
    printf("%s", tstring);
    // initialisieren und ersten Abschnitt erstellen
    ptr = strtok(tstring, delimiter);
    while(ptr != NULL) {
      printf("Abschnitt gefunden: %s\n", ptr);
      // naechsten Abschnitt erstellen
      ptr = strtok(NULL, delimiter);
      if(ptr!= NULL && *ptr != '-'){
        puts("HIT MINUS!");
      }
    }
  }
}

答案 3 :(得分:0)

char tstring[50];

if (fgets(tstring, sizeof tstring, stdin)) {
            printf("%s", tstring);
            }



        char delimiter[] = " ";
        char *ptr;

        // initialisieren und ersten Abschnitt erstellen
        ptr = strtok(tstring, delimiter);

        while(ptr != NULL) {
            printf("Abschnitt gefunden: %s\n", ptr);
            // naechsten Abschnitt erstellen
            if(*ptr == '-'){  // "=="
                puts("HIT MINUS!");
            };
            // moved to the end. Now you won't dereference NULL anyway.
            // and it will work if minus is the last token in string
            // and first returned by strtok()
            ptr = strtok(NULL, delimiter); 
        }