簡體   English   中英

Printf打印錯誤的字符和0

[英]Printf printing wrong char and 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;
}

因為您有&的某些變量不是您想要的。

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”

#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);
   cin >> num1;
   cin >> num2;
   cin >> num3;
   cin >> char1;
   cin >> num4;
   cin >> num5;
   //input: 211916801 452082285 97592151379235457 p 19856.992 -5279235.721231465

   //printf("%d %ld %lld %c %f %lf", num1, num2, &num3, &char1, &num4, &num5);
   cout << num1;
   cout << num2;
   cout << num3;
   cout << char1;
   cout << num4;
   cout << 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;
}

使用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;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM