[英]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.