Printf打印错误的字符和0 对不起,如果这是一个愚蠢的问题,我是C++新手。为什么它不能正确地将所有输入复制到输出 #include <iostream> #include <iomanip> #include <limits> #include <string> using namespace std; int main() { int num1; long num2; long long num3; char char1; float num4; double num5; scanf("%d %ld %lld %c %f %lf", &num1, &num2, &num3, &char1, &num4, &num5); //input: 211916801 452082285 97592151379235457 p 19856.992 -5279235.721231465 printf("%d %ld %lld %c %f %lf", num1, num2, &num3, &char1, &num4, &num5); //expected output: 211916801 452082285 97592151379235457 p 19856.992 -5279235.721231465 //actual output: 211916801 452082285 68674564278975280 c 0.000000 0.000000 system("pause"); return 0; } #包括 #包括 #包括 #包括 使用名称空间std; int main(){ int num1; 长num2; 长num3; char-char1; 浮动num4; 双num5; scanf(“%d%ld%lld%c%f%lf”、&num1、&num2、&num3、&char1、&num4、&num5); //输入:211916801 452082285 97592151379235457 p 19856.992-5279235.721231465 printf(“%d%ld%lld%c%f%lf”、num1、num2、num3、char1、num4、num5); //预期产出:211916801 452082285 97592151379235457 p 19856.992-5279235.721231465 //实际产出:211916801 452082285 68674564278975280 c 0.0000000.000000 系统(“暂停”); 返回0; }

Printf打印错误的字符和0 对不起,如果这是一个愚蠢的问题,我是C++新手。为什么它不能正确地将所有输入复制到输出 #include <iostream> #include <iomanip> #include <limits> #include <string> using namespace std; int main() { int num1; long num2; long long num3; char char1; float num4; double num5; scanf("%d %ld %lld %c %f %lf", &num1, &num2, &num3, &char1, &num4, &num5); //input: 211916801 452082285 97592151379235457 p 19856.992 -5279235.721231465 printf("%d %ld %lld %c %f %lf", num1, num2, &num3, &char1, &num4, &num5); //expected output: 211916801 452082285 97592151379235457 p 19856.992 -5279235.721231465 //actual output: 211916801 452082285 68674564278975280 c 0.000000 0.000000 system("pause"); return 0; } #包括 #包括 #包括 #包括 使用名称空间std; int main(){ int num1; 长num2; 长num3; char-char1; 浮动num4; 双num5; scanf(“%d%ld%lld%c%f%lf”、&num1、&num2、&num3、&char1、&num4、&num5); //输入:211916801 452082285 97592151379235457 p 19856.992-5279235.721231465 printf(“%d%ld%lld%c%f%lf”、num1、num2、num3、char1、num4、num5); //预期产出:211916801 452082285 97592151379235457 p 19856.992-5279235.721231465 //实际产出:211916801 452082285 68674564278975280 c 0.0000000.000000 系统(“暂停”); 返回0; },c++,C++,,因为有些变量的&不是您想要的 printf("%d %ld %lld %c %f %lf", num1, num2, &num3, &char1, &num4, &num5); 应该是 printf("%d %ld %lld %c %f %lf", num1, num2, num3, char1, num4, num5); 编译器应该对此发出警告,因为您传递的值与格式说明符不匹配。如果没有,则打开/增加编译器警告。您应该将值本身而不是指针传递到printf

,因为有些变量的
&
不是您想要的

printf("%d %ld %lld %c %f %lf", num1, num2, &num3, &char1, &num4, &num5);
应该是

printf("%d %ld %lld %c %f %lf", num1, num2, num3, char1, num4, num5);

编译器应该对此发出警告,因为您传递的值与格式说明符不匹配。如果没有,则打开/增加编译器警告。

您应该将值本身而不是指针传递到
printf

printf("%d %ld %lld %c %f %lf", num1, num2, num3, char1, num4, num5);
在Printf(大多数情况下)中,在变量中不使用&

printf("%d %ld %lld %c %f %lf", num1, num2, num3, char1, num4, num5);

另外,如果你是C++新手,那么有更好的方法来执行I/O操作。用“cin”代替“scanf”,用“cout”代替“printf”

#包括
#包括
#包括
#包括
使用名称空间std;
int main(){
int num1;
长num2;
长num3;
char-char1;
浮动num4;
双num5;
//scanf(“%d%ld%lld%c%f%lf”、&num1、&num2、&num3、&char1、&num4、&num5);
cin>>num1;
cin>>num2;
cin>>num3;
cin>>char1;
cin>>num4;
cin>>num5;
//输入:211916801 452082285 97592151379235457 p 19856.992-5279235.721231465
//printf(“%d%ld%lld%c%f%lf”、num1、num2、num3、char1、num4、num5);
cout在使用printf(…)
时,基元类型是通过值传递的,而不是通过引用传递的。请使用以下代码:

#include <iostream>
#include <iomanip>
#include <limits>
#include <string>

using namespace std;

int main() {
    int num1;
    long num2;
    long long num3;
    char char1;
    float num4;
    double num5;
    scanf("%d %ld %lld %c %f %lf", &num1, &num2, &num3, &char1, &num4, &num5);
    printf("%d %ld %lld %c %f %lf", num1, num2, num3, char1, num4, num5);
    system("pause");
    return 0;
}
#包括
#包括
#包括
#包括
使用名称空间std;
int main(){
int num1;
长num2;
长num3;
char-char1;
浮动num4;
双num5;
scanf(“%d%ld%lld%c%f%lf”、&num1、&num2、&num3、&char1、&num4、&num5);
printf(“%d%ld%lld%c%f%lf”、num1、num2、num3、char1、num4、num5);
系统(“暂停”);
返回0;
}

<代码> >为什么你使用C++代码> <代码> >“打印”()/代码>第一位?因为如果我使用CUT,它不打印所有小数的双,但是它使用PrtTF,它也是HackerRank让我做的()检查<代码> STD::固定和<代码> STD::SETIPSION()
。另外,请不要尝试学习,使用这些愚蠢的在线代码判断引擎进行改进。这完全是浪费时间,根本不会让你适合行业级编程(如果不是相反的话)。有些人认为iostream库的设计很糟糕。使用您的代码,双精度输出不正确,应该是-5279235.721231465,但打印出来的是-5279235.721231。使用printf而不是cout解决了这个问题。@kirill2485:这不是“不正确的”。如果您关心特定的精度,那么您需要说明这两种方法中的任何一种。幸运的是,
printf
恰好默认为您想要的值。因此切换IO库(而不是研究如何配置您的工具)是可笑的!您应该有更好的理由做出这样的选择。
#include <iostream>
#include <iomanip>
#include <limits>
#include <string>

using namespace std;

int main() {
    int num1;
    long num2;
    long long num3;
    char char1;
    float num4;
    double num5;
    scanf("%d %ld %lld %c %f %lf", &num1, &num2, &num3, &char1, &num4, &num5);
    printf("%d %ld %lld %c %f %lf", num1, num2, num3, char1, num4, num5);
    system("pause");
    return 0;
}