如何从用户输入中拆分句子(sscanf,fgets)

How to split the sentence from user input (sscanf,fgets)

所以我试图拆分输入用户并将它们分配给特定变量。用户输入的第一个输入将是大写字符,然后是空格和第二个单词。

我是否正确使用了fgets,sscanf来分割句子?

例如,如果我写:“A red”,一切都应该有效。

如果我写“a red”,它应该不起作用,因为 a 不是大写字母

如果我写“A”,它应该打印第二个字没有给出。但它打印出第二个词是给定的:(

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

#define MAX_CAPACITY 255

int main(void) {
  char name[MAX_CAPACITY];
  char input[MAX_CAPACITY]; // for sscanf
  char color[MAX_CAPACITY];  // this will be the second word from the sentence
  char letter;

  printf("Enter your name: ");
  fgets(name, sizeof(name), stdin);
  sscanf(name, "%[^\n]", name);  // to get rid of \n

  while(1){
      printf("Dear %s, enter a capital letter and a color : ",name);
      fgets(input, sizeof(input), stdin);
      sscanf(input, "%c %s",&letter,color);
      
      // if letter is not capital, then stop the programm
      if (letter >= 'a' && letter <= 'z'){
        printf("Dear %s, I wish you farewell and hope to see you again soon !!!\n",name);
        break;
      }
      
      // if second word is empty, then print error message
      if(color[0] == '[=10=]'){
        printf("Second word is not given!\n");
      }else{
        printf("Thank you, the second word is given\n");
        break;
      }
      color[0] = '[=10=]'; // if i don't write this, program doesn't work properly, idk why
  }
  return 0;
}

color 未初始化,因此当 sscanf() 无法读取内容时,您不能依赖 color[0] 的值。

您应该检查 sscanf()(和 fgets())的 return 值,以检查它们是否阅读了所有预期的内容。

另请注意,如果未被禁止,您应该使用标准函数 islower() 而不是 letter >= 'a' && letter <= 'z'