c语言初学者
写一个程序要求 :
如果指令中的第一个数字是1 ,那么您的程序应打印出指令中下一个数字的平方。
如果指令中的第一个数字是2 ,那么您的程序应打印出下一个数字的值,该数字的幂为下一个数字的值。
这是一个循环程序 键盘按下ctrl+D结束程序
例子如下:
Enter instruction: 1 2
4
Enter instruction: 2 5 3
125
Enter instruction: 1 4
16
Enter instruction: 2 3 4
81
这是我的代码:
#include<stdio.h>
#include<math.h>
int main(void) {
int a;
int number[999];
while(1){
for(a=0;;a++){
printf("Enter instruction: ");
scanf("%d", &number[a]);
if(getchar()=='\n'){
break;
}
if(number[0]==1) {
printf("%d\n",number[1]*number[1]);
} else {
printf("%lf\n",pow(number[1],number[2]));
}
}
}
return 0;
}
已经实现了你的要求,效果如下
a的定义应该放在while循环里边,不然a的值一直递增,最后就越界了,你理想的应该是a在0、1、2之间循环
看起来没什么问题,else换成2就更准确点了。
你这么写,for循环每循环一次只能输入一个数字
#include<stdio.h>
#include<math.h>
using namespace std;
int main(void) {
int a, b;
int number[3];
while (1) {
printf("Enter instruction: ");
scanf_s("%d", & number[0]);
if (number[0] == 1)
b = 1;
else
b = 2;
for (a = 1; a <= b; a++)
{
scanf_s("%d", &number[a]);
}
if (number[0] == 1) {
printf("%d\n", number[1] * number[1]);
}
else {
printf("%lf\n", pow(number[1], number[2]));
}
}
return 0;
}
18到20行需要改下
改成这样:
if(number[0]==2) {
printf("%lf\n",pow(number[1],number[2]));
}
改成
#include<stdio.h>
#include<math.h>
int main(void) {
int a;
int number[999];
while(1){
printf("Enter instruction: ");
scanf("%d", &number[0]);
if(number[0]==1){
scanf("%d", &number[1]);
printf("%d\n",number[1]*number[1]);
continue;
}else if(number[0]==2){
scanf("%d", &number[1]);
scanf("%d", &number[2]);
printf("%lf\n",pow(number[1],number[2]));
continue;
}else if(getchar()=='\n'){
break;
}
}
return 0;
}
你的代码在一次内循环中,a的值不变,输入的值全部赋给了number[a]
差了按ctrl+D退出
#include<stdio.h>
#include<math.h>
int main(void) {
int number[999];
int a=250;
while(a--)
{
printf("Enter instruction:");
scanf("%d", &number[0]);
if(number[0]==1)
{
scanf("%d",&number[1]);
printf("%d\n",number[1]*number[1]);
}
else if(number[0]==2)
{
scanf("%d",&number[1]);
scanf("%d",&number[2]);
printf("%d\n",(int)pow(number[1],number[2]));
}
}
return 0;
}
for循环中两个分号中间没加任何东西
在Windows系统的终端下,按ctrl+z再回车,表示输入流结束
在Linux/Unix系统的终端下,按ctrl+d,表示输入流结束
这是由历史原因决定的,详情请参考维基上的介绍
https://en.wikipedia.org/wiki/End-of-Transmission_character
https://en.wikipedia.org/wiki/Substitute_character
当scanf()
遇到输入流结束或读入错误时,scanf()
返回的是EOF,否则返回的是已经正确读入数据的个数,所以你可以判断scanf()
的返回值来决定什么时候结束循环。
#include <stdio.h>
#include <math.h>
int main(void)
{
while (1)
{
printf("Enter instruction: ");
int instruction;
if (scanf("%d", &instruction) != 1)
break;
if (instruction == 1)
{
int number;
if (scanf("%d", &number) != 1)
break;
printf("%d\n", number * number);
}
else if (instruction == 2)
{
int number1, number2;
if (scanf("%d%d", &number1, &number2) != 2)
break;
printf("%d\n", (int)pow(number1, number2));
} else {
printf("invalid instruction\n");
}
}
return 0;
}