如何从用户输入中拆分句子(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'
。
所以我试图拆分输入用户并将它们分配给特定变量。用户输入的第一个输入将是大写字符,然后是空格和第二个单词。
我是否正确使用了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'
。