代码是,
#include <stdio.h>
#include <string.h>
main()
{
int a, b, s;
char ch;
LOOP:
printf("enter digits \t");
scanf("%d %d", &a, &b);
s = a + b;
printf("\n answer is %d", s);
printf("\n add another no.? (yes/no) : \t");
scanf("%c", &ch);
if (ch == "yes")
goto LOOP;
if (ch == "no")
printf("\n Okay bye !!! ");
exit(0);
return 0;
}
有人能说出为什么这不起作用吗?当它问:
Add another no.?
我无法输入任何内容,我输入但没有任何内容可以打印。
Thx in advanced。
答案 0 :(得分:2)
首先,如果你想存储&#34;是&#34;你需要一个char数组,而不是一个char。
然后你不能将char数组与这样的字符串文字进行比较:ch == "yes"
,你必须使用&#34;字符串比较&#34;,strcmp
或strncmp
。
答案 1 :(得分:0)
&#34;是&#34;是char *(或指向char的指针),无法使用==进行比较。在这种情况下,您需要使用库函数strncmp()来比较两个字符串。 char也是一种数据类型,它通常包含一个字节的信息,在这种情况下,一个char不能包含3个字符串&#34; yes&#34;。在使用scanf填充&amp; ch时,由于char的大小,ch最终只包含输入的第一个char。
答案 2 :(得分:0)
你的代码说输入1表示是,0表示否,而你正在检查ch ==&#34;是&#34;和ch ==&#34; no&#34;。
您可以初始化一个整数,例如int choice;
,然后:
printf("\n add another no.? 1 for yes / 0 for no : \t");
scanf("%i", &choice);
if (choice == 1)
goto LOOP;
if (choice == 0){
printf("\n Okay bye !!! ");
exit(0);
}
注意,exit(0)应该在if()语句中,即在{curly bracket}之间。当我们不在if()语句中使用{花括号}时,只有if()之后的第一段代码(在这种情况下为printf();
)与if()一起使用。< / p>
其次,如果你想使用yes和no而不是1和0,那么在这种情况下你不能将字符串与==运算符进行比较。要比较两个字符串,请使用strcmp函数,如果字符串相同则返回0,如果不相同则返回一些正值或负值。 (这就是为什么我们必须使用带有strcmp的!运算符,以便在字符串相同的情况下,并且strcmp返回0,!0变为1,这意味着为真,如果执行了语句。)
我们将ch,一个字符串初始化为char ch[5];
,然后:
printf("\n add another no.? yes for yes / no for no : \t");
scanf("%s", ch);
if (!strcmp(ch,"yes"))
goto LOOP;
if (!strcmp(ch,"no")){
printf("\n Okay bye !!! ");
exit(0);
}