strcmp()如果 [英] strcmp() And if

查看:149
本文介绍了strcmp()如果的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这个代码不应该有效吗?如果不是,为什么不应该呢?


#include< stdio.h>


int main(void)


{


char yesno [10];

char * yes =" yes" ;;

char * no =" no";


printf(" Select:yes or no\ n);

fgets(yesno ,sizeof(yesno),stdin);


if(strcmp(yes,yesno)== 0)

{

printf(" yes \ n");

}

if(strcmp(no,yesno)== 0)

{< br $> b $ b printf(no\\\
);

}


返回0;


}

解决方案

ei ** ***@grex.cyberspace.org (Eirik)写道:

这段代码不应该有效吗?如果没有,为什么不应该呢?


这取决于你如何定义工作。如果程序收到

字符y,e和s,紧接着是文件结尾

条件,在标准输入上,它打印是。然后是换行符

字符。如果收到''n''和'o'',再接着是文件结尾

条件,则打印出否。接着是换行符。如果那是

该程序应该做什么,那么它的工作原理。


如果`fgets''读取整行,那么程序无法打印要么是'yes \ n'要求

或no\\\
,因为如果有一个
,那么`fgets''会存储最终的换行符。 />
#include< stdio.h>


由于程序使用`strcmp'',我建议您还包括

< string.h> ;.

int main(void)

{yes yesno [10];
char * yes =" yes" ;;


由于指针本身未被修改,并且内存指向

(字符串文字)无法修改,我建议你同时使用

常数:


const char * const yes =" yes" ;;

char * no =" no" ;;


同样。

printf(" Select:yes or no\ n);


这里也可以使用更简单的`puts''函数。

fgets(yesno,sizeof(yesno),stdin);


如上所述,`fgets''存储最终换行符,如果在文件结尾或发生错误之前有一个
。另外,你可能想要检查

的返回值:如果发生错误或文件结束时它是一个空指针

在至少一个字符出现之前发生阅读。

if(strcmp(yes,yesno)== 0)
{
printf(" yes \ n");


再次,'puts''也是可能的。

}
if(strcmp(no,yesno)== 0)


因为如果前一个条件已经确定,这个条件不可能是真的,你可以通过写作来避免不必要的测试


else if(strcmp(no,yesno)== 0)

{
printf(" no\\\
);;


再次,'puts''也是可能的。

}

返回0;

}



Martin


fgets包含用户要验证的第一个CR字符

他的回答是'为什么strcmp返回1而不是0.


为了避免你可以这样做:


if(strncmp(是,yesno,3)== 0)

{

printf(" yes \ n");

}


-

UnVéritablelui,code en fortran。


" Eirik" < EI ***** @ grex.cyberspace.org> écritdansle message de news:
76 ************************* @ posting.google.com ...

难道这段代码不行吗?如果不是,为什么不应该呢?

#include< stdio.h>

int main(无效)

{

char yesno [10];
char * yes =" yes" ;;
char * no =" no" ;;

printf("选择:是或否\ n");
fgets(yesno,sizeof(yesno),stdin);

if(strcmp(yes,yesno)== 0)
{
printf(" yes \ n");
}
if(strcmp(no,yesno)== 0)
{
printf(" ; no\\\
;
}

返回0;

}



< blockquote> ei*****@grex.cyberspace.org (Eirik)写道:

这段代码不应该有效吗?如果不是,为什么不应该呢?

#include< stdio.h>

int main(无效)
{
char yesno [10];
char * yes =" yes" ;;
char * no =" no" ;;

printf(" Select:yes or no\\\
;);
fgets(yesno,sizeof(yesno),stdin);


如果输入是然后yesno将包含yes \ n,

if(strcmp(yes,yesno)== 0)
{
printf(" yes \ n );




所以你不会来这里。


Shouldn''t this code work? If not, why shouldn''t it?

#include <stdio.h>

int main(void)

{

char yesno[10];
char *yes = "yes";
char *no = "no";

printf("Select: yes or no\n");
fgets(yesno, sizeof(yesno), stdin);

if(strcmp(yes, yesno) == 0)
{
printf("yes\n");
}
if(strcmp(no, yesno) == 0)
{
printf("no\n");
}

return 0;

}

解决方案

ei*****@grex.cyberspace.org (Eirik) writes:

Shouldn''t this code work? If not, why shouldn''t it?
That depends on how you define "work". If the program receives the
characters ''y'', ''e'', and ''s'', immediately followed by an end-of-file
condition, on standard input, it prints "yes" followed by a newline
character. If it receives ''n'' and ''o'', again followed by an end-of-file
condition, it prints "no" followed by a newline character. If that is
what the program is supposed to do, then it works.

If `fgets'' reads a full line, then the program cannot print either "yes\n"
or "no\n", because `fgets'' stores the final newline character if there is
one.
#include <stdio.h>
Since the program uses `strcmp'', I recommend that you also include
<string.h>.
int main(void)

{

char yesno[10];
char *yes = "yes";
Since the pointer itself is not modified, and the memory pointed to
(a string literal) cannot be modified, I recommend that you make both
constant:

const char *const yes = "yes";
char *no = "no";
Likewise.
printf("Select: yes or no\n");
The simpler `puts'' function would also have been possible here.
fgets(yesno, sizeof(yesno), stdin);
As explained above, `fgets'' stores the final newline character if there is
one before end-of-file or an error occur. Also, you might want to check
the return value: it is a null pointer if an error occurs or end-of-file
occurs before at least one character has been read.
if(strcmp(yes, yesno) == 0)
{
printf("yes\n");
Again, `puts'' would also have been possible.
}
if(strcmp(no, yesno) == 0)
Since this condition cannot be true if the previous condition has already
been true, you could avoid an unnecesary test by writing

else if (strcmp (no, yesno) == 0)
{
printf("no\n");
Again, `puts'' would also have been possible.
}

return 0;

}


Martin


fgets include the first CR caracter that the user type to validate
his answer that''s why strcmp returns 1 and not 0.

To avoid that you can do :

if(strncmp(yes, yesno, 3) == 0)
{
printf("yes\n");
}

--
Un Véritable lui, code en fortran.

"Eirik" <ei*****@grex.cyberspace.org> a écrit dans le message de news:
76*************************@posting.google.com...

Shouldn''t this code work? If not, why shouldn''t it?

#include <stdio.h>

int main(void)

{

char yesno[10];
char *yes = "yes";
char *no = "no";

printf("Select: yes or no\n");
fgets(yesno, sizeof(yesno), stdin);

if(strcmp(yes, yesno) == 0)
{
printf("yes\n");
}
if(strcmp(no, yesno) == 0)
{
printf("no\n");
}

return 0;

}



ei*****@grex.cyberspace.org (Eirik) writes:

Shouldn''t this code work? If not, why shouldn''t it?

#include <stdio.h>

int main(void)
{
char yesno[10];
char *yes = "yes";
char *no = "no";

printf("Select: yes or no\n");
fgets(yesno, sizeof(yesno), stdin);
If you enter "yes" then yesno will contain "yes\n",
if(strcmp(yes, yesno) == 0)
{
printf("yes\n");



so you won''t get here.


这篇关于strcmp()如果的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆