更新
我在第4章的问题2 上遇到了一些问题。“C编程指南”由Paul Kelly撰写。
据我所知,我的语法是正确的,但是当程序到达第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);
}
答案 0 :(得分:1)
git rebase --interactive
使用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);
ENTER
之前的scanf
'\n'
之后按了stdin
。
答案 1 :(得分:0)
scanf("%1s %1s", &keyVal1, &keyVal2);
它应该是......
scanf(" %c %c", &keyVal1, &keyval2);
你需要使用c
标识符来结束崩溃,现在在你这样做之后你会注意到第一个字符似乎没有被读入。这是因为您之前有printf()
,因此scanf()
会在char
printf()
中的\n
字符中读取printf()
。我们必须通过在标识符之前放置一个空格来解决这个问题,因此它不会读取stdin中的最后一个值。
此外,您需要将scanf()
语句更改为相同的标识符,否则将会出现未定义的操作&#39;。
此外,最后 scanf(" %c %d %f %lf",&c, &i, &f, &d);
将其更改为此...
Question
通过取出最后一个标识符之后的空格,该程序运行良好。
答案 2 :(得分:0)
问题在于这一行:
scanf(" %c %d %f %lf",&c, &i, &f, &d);
格式字符串末尾的空格意味着所有的空格&#39;消耗,直到在输入流中遇到非空白字符。
因此,在输入4个请求值后,scanf()永远不会完成,直到用户输入非空格字符。
要解决此问题,请删除格式字符串中的尾随空格。
{{1}}