strcmp()如果 [英] strcmp() And if
问题描述
这个代码不应该有效吗?如果不是,为什么不应该呢?
#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屋!