c - 重启程序的问题

标签 c

作为我学位的一部分,今年我接触了 C,在此期间我必须编写简单的程序并通过一遍又一遍地运行它们、放入无意义的变量等来测试它们是否是白痴,并且我有一个想法,可以编写一个无需再次运行程序即可自行重启的程序。

我已经尝试编写一个程序来执行此功能(事实证明这比我最初想象的要难)并且我现在可以使用它了,尽管使用了一个不受欢迎的 goto 函数。现在我遇到的唯一问题是一个 while 循环来检查无意义的输入,它似乎决定至少运行一次而忽略有效输入的提示。

有人能告诉我为什么会这样吗? (我的编译器是Dev-C++ 4.9.9.2)

int main (void)
{
  mainprogram:
            printf("\nPROGRAM START\n");

    //code copied from an exam, to check that the program performs a function
    //when ran through again

    int i,j,k;

    printf("Please enter 7:");
    scanf("%d",&i);

    printf("Please enter 4:");
    scanf("%d",&j);

    printf("Please enter 0:");
    scanf("%d",&k);
    //this is to check that the program will take input when it is restarted
    do {
        switch (i%j) {
            case 3:
                i--;
                k*=i;
                break;
            case 2:
                i--;
                k+=i;
            default:
                i--;
                k++;
                break;
        }
        printf("i is %d k is %d\n",i,k);
    } while (i>0);
    //end of copied code

    char prompt='y';
    printf("\nRestart program?");
    scanf("%c",&prompt);

    while (prompt != 'y' && prompt != 'Y' && prompt != 'n' && prompt != 'N')
    {

    //this is the problem section, when entering nonsense input, the error messages
    //display twice before pausing for input, and when restarted, the program does 
    //run again but displays the error messages once before pausing for input

       printf("\nERROR: INVALID INPUT");
       printf("\n\nRestart program?");
       prompt='y';
       scanf("%c",&prompt);
    }


    if (prompt == 'y' || prompt == 'Y') 
    {
          goto mainprogram;
          }

    //
    return 0;
}

最佳答案

while(1){    //parent

 printf("\n\nRun program?");
 scanf("%c",&prompt);

if (prompt == 'n' || prompt == `N`)
{
  printf("\nEXITINT")
  return 0;
}



int i,j,k;

printf("Please enter 7:");
scanf("%d",&i);

printf("Please enter 4:");
scanf("%d",&j);

printf("Please enter 0:");
scanf("%d",&k);

switch (i%j)
{
case 3:
i--;
k*=i;
break;
case 2:
i--;
k+=i;
break;
default:
i--;
k++;
break;
}
printf("i is %d k is %d\n",i,k);
} //end while parent 

//复制代码结束

关于c - 重启程序的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21354765/

相关文章:

c - 连接微 Controller 和打印机..用 C 编程编码

c - #define 指令中的 for 或 while 循环

c - 十六进制到 Ascii 转换 C

c - void 影响程序的输出

c - 取消引用指向不完整类型的指针 - 列表

c - 如何打破 C 中的无限 for(;;) 循环?

c - 在 C 中定义 16 位整数

c - float 仅显示零 (C)

android - 使用 javah 工具时包含 Android 平台 jar

c - C 中的静态函数