c 语言 能帮我看看代码有什么问题吗

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;
}


已经实现了你的要求,效果如下

img

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;
}