printf输出正被“\ n”压缩。我正在尝试使用。
scanf ("%*c");
选择“\ n”,但它不起作用......这里是代码
printf("Enter char float int char:", char4, deci2, num2, char5);
scanf ("%c %f %d %c", &char4, &deci2, &num2, &char5);
scanf ("%*c");
printf("You entered: '%c' %.3f %d '%c' " ,char4 ,deci2, num2, char5 );
并输出到
Enter char int char float:a 5 a 5.5
You entered: 'a' 5 'a' 5.500
Enter char float int char:a 5.5 6 b
You entered: '
' 0.000 0 ''
答案 0 :(得分:3)
在这一行:
printf("Enter char float int char:", char4, deci2, num2, char5);
删除char4
,deci2
,num2
和char5
。如果您仍然看到Carl Norum建议的问题,那么请尝试使用第一个scanf留下的换行符:
scanf ("%c %f %d %c", &char4, &deci2, &num2, &char5);
getchar();
printf("You entered: '%c' %.3f %d '%c' " ,char4 ,deci2, num2, char5 );
答案 1 :(得分:3)
该行
scanf ("%c %f %d %c", &char4, &deci2, &num2, &char5);
正在从之前的scanf
调用中获取输入缓冲区中剩余的迷路换行符。您可以通过在第一个%c
:
scanf (" %c %f %d %c", &char4, &deci2, &num2, &char5);
这将告诉scanf
在读取下一个非空格字符之前跳过任何前导空格(空格,换行符,制表符等)。
该行
printf("Enter char float int char:", char4, deci2, num2, char5);
有点令人头疼;它不会导致任何问题(多余的参数被评估,但在其他方面被忽略),但它看起来不对,并表示有些混乱。
答案 2 :(得分:2)
这是第一次读取缓冲区中剩余的\n
仍在闲逛。你需要在之前吃那个做第二个scanf
,而不是之后。
编辑说明:您应该在问题中包含所有相关代码,而不仅仅是一个子集。我只能从你提供的输出中推断出这是你的问题。它包含您的示例代码中不存在的字符串Enter char int char float
。