第一个C程序中的异常行为

天哪

我正在编写一个程序,根据他们的收入来确定谁应该在家庭中支付多少钱。所需的行为如下:

  • 打印欢迎消息,并询问家里有多少人。
  • 如果输入的数字是10或以下,请询问他们的名字。
  • 要求每个人的收入。<-这是问题所在
  • 显示总收入。
  • 计算并显示结果。

显然,此程序尚未完成,我需要停止用户输入负值,但是最大的问题是,当用户输入每个人的收入时,在按返回键时它不再要求用户输入,并且总收益会出现为0。

我习惯于使用C ++进行编程,所以希望我刚刚错过了C的怪癖。

main.c

#include <stdio.h>

int main(void){

    short numberOfPeople = 0;
    char* names[10] = {0,0,0,0,0,0,0,0,0,0};
    float earnings[10] = {0,0,0,0,0,0,0,0,0,0};
    float totalEarnings = 0;
    float bills = 0;

    printf("Welcome!\nThis program calculates who should pay what for the bills in a proportional manner, based upon each persons income.\nHow many people are in your household?\n\n");

    do {
        printf("You can enter up to 10: ");
        scanf("%d", &numberOfPeople);
    } while(numberOfPeople > 10);

    puts("");

    for(short j = 0; j < numberOfPeople; ++j){
        printf("What is person %d's name? ", j+1 );
        scanf(" %s", &names[j]);
    }

    puts("");   

    for(short i = 0; i < numberOfPeople; ++i){
        printf("How much did %s earn this month? ", &names[i]);
        scanf(" %.2f", &earnings[i]);       
        totalEarnings += earnings[i];
    }

    printf("\nTotal earnings are %.2f.\n\n", &totalEarnings);

    printf("How much are the shared bills in total? ");
    scanf(" %.2f", &bills);

    puts("");

    for(short k = 0; k < numberOfPeople; ++k){
        printf("%s should pay %.2f", &names[k], &bills); 
    }

    puts("");   

    return 0;
}
克里斯·多德(Chris Dodd)

&在printf调用中存在多余字符的问题,其他人已经注意到。

您报告的问题很可能是由以下原因引起的:

scanf(" %.2f", &earnings[i]);

问题在于,.在scanf格式中没有定义的含义(它可能被忽略,或者可能导致scanf调用失败。)将2输入限制为2个字符,因此,如果任何人的收入超过2个字符,则输入将失败数字。因此,您需要摆脱这些障碍,而您真正需要的是检查scanf的返回值以查看其是否失败,并进行适当的处​​理。就像是:

while (scanf("%f", &earnings[i]) != 1) {
    scanf("%*[^\n]"); /* throw away the rest of the line */
    printf("That doesn't look like a number, what did they earn this month? ");
}

所有其他scanf调用都应执行类似的操作

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Oracle使用后续块中第一个块中的异常处理程序

如何从C#中的第一个程序打开另一个程序?

试图使我的第一个程序循环(C ++)

C#中的第一个控制台应用程序

为什么订阅处理程序函数在第一个函数之前的行为与 onValue 不同?

我的第一个应用程序无法正常工作和崩溃:UnsupportedOperationException异常

指向C中数组的第一个元素

Python 字典打印第一个单词的行为

JTextPane中第一个字母左侧的意外填充/意外的印刷行为

Task.WhenAll中的AggregateException仅在等待时包含第一个异常

Process.spawn中的“错误的第一个参数”异常

Python多处理池吞噬了第一个块的输入中的异常

第一个applet-浏览器中的Null Point异常?

第一个C#实际项目(HRESULT的异常:0x80070002)

C++ 程序自动舍入除数组中的第一个值以外的双精度值

For 循环忽略第一行,在 C 中的第一个循环执行之后

编写一个 C++ 程序,将用户输入的句子中每个单词的第一个字母大写

从程序集 8086 中的字符串中删除第一个出现的空格

第一个选择中的第一个选择的mySQL使用结果

访问对象中第一个键的第一个值

我的第一个小部件的标题的行为就像一个链接

Django 第一个应用程序

程序在循环后跳过第一个输入

第一个程序不顺利

程序绕过第一个fget

什么是我的堆栈程序的第一个变量?

Python-与程序的第一个接口

第一个导致大量错误的程序

第一个硒程序不起作用