Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在if()语句中使用strcmp()作为条件如何工作?_C_Strcmp - Fatal编程技术网

在if()语句中使用strcmp()作为条件如何工作?

在if()语句中使用strcmp()作为条件如何工作?,c,strcmp,C,Strcmp,以下psuedocode(其psuedocode,因为其语法不正确)的输出生成“计算机” strcpy(s1,“计算机”); strcpy(s2,“科学”); if(strcmp(s1,s2)

以下psuedocode(其psuedocode,因为其语法不正确)的输出生成“计算机”

strcpy(s1,“计算机”);
strcpy(s2,“科学”);
if(strcmp(s1,s2)<0)
{
strcat(s1,s2);
}
其他的
{
strcat(s2,s1);
}
s1[strlen(s1)-6]='\0';

我不清楚其结果如何是“计算机”。我无法理解在if()语句中如何使用strcmp()的逻辑好的,首先让我们看一个代码的工作示例,然后我将解释它是如何工作的:

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

void main() {

  char s1[100], s2[100];

  strcpy(s1, "computer");
  strcpy(s2, "science");

  if(strcmp(s1, s2) < 0)
  {
   strcat(s1, s2); 
  }
  else
  {
   strcat(s2, s1);
  }

  s1[strlen(s1) - 6] = '\0';
  printf("%s",s1);
}
#包括
#包括
void main(){
字符s1[100],s2[100];
strcpy(s1,“计算机”);
strcpy(s2,“科学”);
if(strcmp(s1,s2)<0)
{
strcat(s1,s2);
}
其他的
{
strcat(s2,s1);
}
s1[strlen(s1)-6]='\0';
printf(“%s”,s1);
}
变量s1设置为“计算机”,变量s2设置为“科学”。使用strcmp()完成的第一个字符串比较计算s1的值是否小于s2的值。如果是这样,那么s1将与s2连接,因此s1的新值将是“计算机科学”。否则,无论字符串具有相同的值还是s2大于s1,s2都会连接到s1,s2的结果值为“sciencecomputer”

产生真实结果的假设条件是“计算机”比“科学”要少
s1的价值发生变化,成为“计算机科学”。然后从s1的长度中减去值6,在恰好包含字符“c”的索引处,将空字符设置为该元素的值。因此,s1的值是“计算机\0效率”。这意味着,当s1传递给printf()时,该函数将打印每个字符,直到它到达空字符,然后该函数停止显示空字符及其后面的字符。

使用调试器并检查每行后面的变量值。在文档中查找您不理解的函数。@M.M这个问题不是为了调试。这是一个逻辑问题。很抱歉,我不清楚这一点。我提供的代码不是用来运行的,它只是用来查看和理解逻辑。这是我关于stackoverflow的第一个问题。我还在学习:)你应该在发帖之前先解决你的问题,解决问题的一个方法就是按照debugger@M.M我不会特意在这里创建一个帐户,然后把问题贴到我自己都不想弄明白的东西上。为什么我要调试一段不完整的代码?同样,我试图理解逻辑,而不是语法,不是错误检查,也不是调试。总之,有人帮了我。我得到了答案。“我为什么要调试一段不完整的代码?”-因为这是一种找出你不理解的逻辑的方法,谢谢你的回答。那么,是什么让s1小于s2呢?我知道,根据ASCII表,“计算机”第一个字母的“c”是十进制数99,“科学”第一个字母的“s”是十进制数115。这就是strcmp所比较的吗?对不起,如果这听起来让人困惑的话。我很困惑,所以我发现很难正确地表达我的问题。不客气。比较是针对两个字符串中的每个字符执行的,当字符不匹配时,比较停止。这里有一个你可能会发现很有用的链接:它处理C中的strcmp。
#include <stdio.h>
#include <string.h>

void main() {

  char s1[100], s2[100];

  strcpy(s1, "computer");
  strcpy(s2, "science");

  if(strcmp(s1, s2) < 0)
  {
   strcat(s1, s2); 
  }
  else
  {
   strcat(s2, s1);
  }

  s1[strlen(s1) - 6] = '\0';
  printf("%s",s1);
}