繁体   English   中英

C程序崩溃…“读入并输出各种数据类型”

[英]C Program Crashing… 'Read in and Output Various Data Types'

更新

我对Paul Kelly 撰写的“ C编程指南” 第4章中的 问题2感到有些麻烦。

据我所知,我的语法是正确的,但是当程序到达第36行时,程序会自动填充scanf(); 可变插槽。

我似乎在任何地方都找不到解决此问题的方法。

这是我的代码。 我在第36行旁边放了一个标记


/* 
   Program to demonstrate single scanf function
   to read various data types and output results.

*/  
#include <stdio.h>

main(){
    int first;
    int second, third, fourth;
    float principle, rate, time;
    char keyVal1, keyVal2;
    char c;
    int i;
    float f;
    double d;

    printf("\nPlease Enter an Integer\n");
    scanf("%d", &first);
    printf("\nYou Entered %d\n", first);

    printf("\nThank You, Please Enter 3 more integers\n");
    scanf("%d %d %d", &second, &third, &fourth);
    printf("\nYou Entered %d %d and %d\n", second, third, fourth);

    printf("\nGreat, 
            now please enter decimal values for principle, 
           rate and time.\n");
    scanf("%f %f %f", &principle, &rate, &time);
    printf("\nYou Entered %.2f %.2f and %.2f\n", principle, rate, time);

    printf("\nPlease Enter any 2 characters\n");
    scanf(" %c %c", &keyVal1, &keyVal2);
    printf("\nYou Entered %c and %c\n", keyVal1, keyVal2); 

    // ***36     
    printf("\nNow Enter any other character, 
            followed by an integer and 2 decimal numbers\n");***
    scanf(" %c %d %f %lf ",&c, &i, &f, &d);
    printf("\nYour character was %c.\nYour integer was %d\nYour 
           decimal numbers were %.2f and %.2lf\n", c, i, f, d);     
} 
scanf("%1s %1s", &keyVal1, &keyVal2);

使用%c说明符而不是%1s

scanf(" %c %c", &keyVal1, &keyVal2);

同样,

scanf("%c %d %f %lf ",&c, &i, &f, &d); 

%c之前留一个空格-

scanf(" %c %d %f %lf ",&c, &i, &f, &d);

您需要留出空间,因为在先前的scanf '\\n'保留在stdin之后,按ENTER

 scanf("%1s %1s", &keyVal1, &keyVal2);

它应该是...

 scanf(" %c %c", &keyVal1, &keyval2);

您需要使用c标识符,这将结束崩溃,现在您执行完该操作后,您会发现第一个字符似乎没有被读入。这是因为您之前有一个printf() ,所以您scanf()将读取printf()中的最后一个char ,即\\n字符。 我们必须通过在标识符之前放置一个空格来解决此问题,因此它不会读入stdin中的最后一个值。 另外,您需要将printf()语句更改为相同的标识符,否则将发生“未定义的操作”。

另外,最后一个scanf()将其更改为...

 scanf(" %c %d %f %lf",&c, &i, &f, &d);

通过删除最后一个标识符后的空格,该程序运行良好。

问题是此行:

scanf(" %c %d %f %lf ",&c, &i, &f, &d);

格式字符串末尾的空格表示所有“空白”都将被消耗,直到在输入流中遇到非空白字符为止。

因此,在输入4个请求值之后,直到用户输入非空白字符,scanf()才完成。

要解决此问题,请删除格式字符串中的尾随空格。

scanf(" %c %d %f %lf",&c, &i, &f, &d);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM