簡體   English   中英

使用 printf() function 代替 cout 的問題

[英]Problem in using printf() function instead of cout

我試圖從 kickstart 解決破紀錄的一天問題

我有兩個問題:

  1. 為什么printf function 不工作但cout工作(這意味着邏輯沒有問題)
  2. 為什么代碼沒有通過 kickstart 中給出的測試用例 1。
#include <bits/stdc++.h>
using namespace std;
long long solve(){
    long long n;
    cin >>n;
    long long a[n];
    for(long long j=0;j<n;j++)
            cin>>a[j];
    long long k=0,ans=0;
    for(long long j=0;j<n-1;j++){
        if(a[j]>k){
            k=a[j];
            if(a[j]>a[j+1]){
                ans++;
            }
        }
    }
    if(a[n-1]>k)
        ans++;
    return ans;
}
int main(){
    long long t;
    cin >> t;
    for(long long i=1;i<=t;i++){
        printf("Case #%d: %d\n",i,solve());//instead of printf() this works: cout<<"Case #"<<i<<": "<<solve()<<endl;
    }
    return 0;
}

來自 kickstart 的示例測試用例:

4
8
1 2 0 7 2 0 2 0
6
4 8 15 16 23 42
9
3 1 4 1 5 9 2 6 5
6
9 9 9 9 9 9

output 與 printf():

Case #1: 0
Case #2: 0
Case #3: 0
Case #4: 0

預期輸出(我用 cout 得到的輸出):

Case #1: 2
Case #2: 1
Case #3: 3
Case #4: 0

printf格式代碼%d需要一個int not a long long

int的最大值是 2,147,483,647,對於您的使用可能足夠大。


cout工作的原因是因為std::ostream::operator<<被重載以理解long long值。

您對printf使用了錯誤的格式說明符。

%d格式說明符需要一個int但您傳入的是long long 使用錯誤的格式說明符會觸發未定義的行為

要打印long long ,您需要使用%lld

cout上使用<<運算符具有各種參數類型的重載,因此它根據所選重載知道類型。

暫無
暫無

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

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