如何解决如何比较C中的两个字符串?
我想比较 2 个字符串,如果它们相等,它应该打印一些东西。我已经看到了一个帖子,但它对我不起作用。帖子:How to compare strings in an "if" statement?
代码:
int main(void) {
char string[100];
printf("Please enter something: ");
fgets(string,100,stdin);
if (strcmp(string,"a") == 0)
printf("a");
else if (strcmp(string,"b") == 0)
printf("b");
else if (strcmp(string,"c") == 0)
printf("c");
else
printf("something else");
return (0);
}
虽然我输入了 a
,但它打印出了“别的东西”。
解决方法
函数 fgets
可以将您应该删除的换行符 '\n'
附加到输入的字符串。例如
fgets(string,100,stdin);
string[ strcspn( string,"\n" ) ] = '\0';
或
fgets(string,stdin);
char *p = strchr( string,'\n' );
if ( p != NULL ) *p = '\0';
来自 C 标准(7.21.7.2 fgets 函数)
2 fgets 函数读取最多比读取的数量少 1 来自 stream into 指向的流中的 n 指定的字符 s 指向的数组。 在 a 之后不会读取额外的字符 换行符(保留) 或在文件结束之后。一个空 字符在读入的最后一个字符后立即写入 数组。
,当用户按下 Enter 键时,fgets()
也会接受换行符。因此,为了从存储在 `string[100] 中的内容中删除它,只需更改:
fgets(string,stdin);
到
strtok(fgets(string,stdin),"\n");
删除换行符。只需确保包含 #include <string.h>
标头
进一步阅读
如果您想知道 strtok
的作用,请查看 https://www.tutorialspoint.com/c_standard_library/c_function_strtok.htm
C 库函数 char *strtok(char *str,const char *delim) 使用分隔符 delim 将字符串 str 分解为一系列标记。
char *strtok(char *str,const char *delim)
如果您确实进行了一些研究,您可以自己回答这个问题。
int main(void) {
char string[100];
printf("Please enter something: ");
fgets(string,stdin);
if (strcmp(string,"a") == 0)
printf("a");
else if (strcmp(string,"b") == 0)
printf("b");
else if (strcmp(string,"c") == 0)
printf("c");
else
{
printf("something else - lets check why:\n Entered string:\n");
for(size_t n = 0; n <= strlen(string); n++)
{
printf("string[%2zu] = ",n);
switch(string[n])
{
case '\n':
printf("\\n");
break;
case '\r':
printf("\\r");
break;
case 0:
printf("null char");
break;
default:
if(string[n] < ' ' || string[n] > 127)
{
printf("\\x%x",(unsigned)string[n]);
}
else
printf("'%c'",string[n]);
}
printf("\n");
}
}
return (0);
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。