而声明错误傻瓜证明

时间:2016-11-05 00:34:02

标签: c

错误发生在int getInt(void)的while循环中 我想循环并要求用户输入一个数字,所以如果他们输入10就会通过,但如果他们要输入10abc,它应该循环并再次询问并继续询问,直到有效输入。它应该是万无一失的,所以它只会传递一个数字而且就是这样。由于某种原因,while循环中的printf语句无限循环,我无法输入新值。

sudo chown -R YOUR_USERNAME:admin /usr/local/

// 1-在提交里程碑之一时注释掉主要内容 // 2-您的最终里程碑应该与以下测试程序完美匹配。 //注释掉main()删除箭头后面的下两个字符

{#include <stdio.h>

void welcome(void);
int getInt(void);
double getDbl(void);
void prnTitle(void);
void prnFooter(double gTotal);
void pause(void);
double getDblLimited(double lowerLimit, double upperLimit);

/ *结束评论主要出* /

//在这里实现里程碑式的功能: 无效欢迎(无效)     {     printf(“--- --- = Grocery Inventory System === --- \ n”);

int main(void)
{
int iVal;
double dVal;
welcome();

// testing prnTitle()
printf("listing header and footer with grand total:\n");
prnTitle();

printf("");

// Testing prnFooter()
prnFooter(1234.5678);
printf("listing header and footer without grand total:\n");
prnTitle();
prnFooter(-1);


// Testing Pause() and clrKyb()
pause();


// Testing getInt()
printf("Enter an integer: ");
iVal = getInt();
printf("You entered: %d\n", iVal);


// Testing Get Int Limited
printf("Enter an integer between 10 an 20: ");
iVal = getIntLimited(10, 20);
printf("Your entered %d\n", iVal);


// Testing Get Double
printf("Enter a floating point number: ");
dVal = getDbl();
printf("You entered: %0.2lf\n", dVal);


// Tesing Get Double Limited
printf("Enter a floating point number between 10.00 an 20.00: ");
dVal = getDblLimited(10.0, 20.0);
printf("You entered: %0.2lf\n", dVal);



printf("End of tester program for milestone one!\n");
return 0;
}

1 个答案:

答案 0 :(得分:0)

tsk tsk jason。阅读大纲并查看流程图。你需要添加&#34; clrKyb();&#34;进入while循环。

同样清晰的字符已经是stdio.h库中包含的一个函数。(这在我们的教科书和在线笔记中确实如此)

void clrkyb(void) 
{
    while( getchar() != '\n' );
} ;

int getInt(void) 
{    
    int d ;
    char c ;

    scanf( "%d%c", &d, &c );

    while( c != '\n' ) 
      {
        clrKyb();
        printf( "Invalid"...": " );
        scanf( "..." &.. );
      }
    return d ;
} ;