Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/65.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
在C中执行While循环_C - Fatal编程技术网

在C中执行While循环

在C中执行While循环,c,C,我知道这可能是一个非常简单的问题,但我问过一些有经验的人,他们不知道为什么。这只是一个简单的do-while循环,实际上直接出自《C语言初学者指南》。当它运行时,您键入n以输入更多数字,它将继续运行。如何让它退出循环?我在Mac上使用XCode,它使用C #include <stdio.h> int main() { float num1, num2, result; char choice; do { num1 = num2 = result = 0; print

我知道这可能是一个非常简单的问题,但我问过一些有经验的人,他们不知道为什么。这只是一个简单的do-while循环,实际上直接出自《C语言初学者指南》。当它运行时,您键入
n
以输入更多数字,它将继续运行。如何让它退出循环?我在Mac上使用XCode,它使用C

#include <stdio.h>

int main() {
float num1, num2, result;
char choice;
do {
    num1 = num2 = result = 0;
    printf("first number?\n");
    scanf(" %f", &num1);
    printf("second number?\n");
    scanf(" %f", &num2);
    result = num1*num2;
    printf("ans = %.0f\n", result);
    printf("do you want to enter another pair of numbers? (Y/N)\n");
    scanf(" %c", &choice);

} while (choice != 'N' && choice  != '\n');
return 0;
}
#包括
int main(){
浮点num1,num2,结果;
字符选择;
做{
num1=num2=result=0;
printf(“第一个数字?\n”);
scanf(“%f”和num1);
printf(“第二个数字?\n”);
scanf(“%f”&num2);
结果=num1*num2;
printf(“ans=%.0f\n”,结果);
printf(“是否要输入另一对数字?(Y/N)\N”);
scanf(“%c”,选择(&c));
}while(choice!='N'&&choice!='\N');
返回0;
}
应该是

scanf("%f", &num1);
并检查
scanf()的返回值


当您输入
N
\N
时,您应该能够在此之后退出循环

如果您输入N
'N'
)或输入
'\N'
),它将停止运行。如果您不想再输入小写的n
'n'
),您应该写:

while (choice != 'N' && choice != 'n' && choice  != '\n');

你犯的错误是关于
scanf
语句的。程序的运行代码如下所示:

       #include <stdio.h>
       int main() {
       float num1, num2, result;
       char choice;
       do {
           num1 = num2 = result = 0;
           printf("first number?\n");
           scanf("%f", &num1);
           printf("second number?\n");
           scanf("%f", &num2);
           result = num1*num2;
           printf("ans = %.0f\n", result);
           printf("do you want to enter another pair of numbers?  (Y/N)\n");
           scanf("%c", &choice);
           } while (choice != 'N' && choice  != 'n');
           return 0;
           }
#包括
int main(){
浮点num1,num2,结果;
字符选择;
做{
num1=num2=result=0;
printf(“第一个数字?\n”);
scanf(“%f”和num1);
printf(“第二个数字?\n”);
scanf(“%f”&num2);
结果=num1*num2;
printf(“ans=%.0f\n”,结果);
printf(“是否要输入另一对数字?(Y/N)\N”);
scanf(“%c”,选择(&c));
}while(choice!=“N”&&choice!=“N”);
返回0;
}

您犯了一个极其严重的错误,没有检查I/O函数的返回值(
scanf
printf
)。如果不检查返回值,您将无法在编程中取得任何进展。抱歉,我不确定您的意思。。。我没有检查什么返回值?我应该如何改进它?请阅读
scanf
的手册。看看它返回了什么,以及在给定其返回值的情况下,您可以对其效果做出哪些假设。明白了。它的工作现在要感谢对scanf(“%f”和&num1)的更改不是必需的。无论空间大小,两个
scanf
都执行相同的操作。删除
choice!='\n'
因为这永远都不会是真的。为什么答案是-1?请访问stackoverflow.com,告诉我你在我的回答上加-1的原因不是我的反对票,但很可能是你说的与其他两个答案没有什么不同,但你在其他两个答案一个半小时后提交了答案。您还没有对所做的更改给出非常详细的解释。压痕也有点不稳定。
while (choice != 'N' && choice != 'n' && choice  != '\n');
       #include <stdio.h>
       int main() {
       float num1, num2, result;
       char choice;
       do {
           num1 = num2 = result = 0;
           printf("first number?\n");
           scanf("%f", &num1);
           printf("second number?\n");
           scanf("%f", &num2);
           result = num1*num2;
           printf("ans = %.0f\n", result);
           printf("do you want to enter another pair of numbers?  (Y/N)\n");
           scanf("%c", &choice);
           } while (choice != 'N' && choice  != 'n');
           return 0;
           }