[英]Problem in using printf() function instead of cout
我有兩個問題:
printf
function 不工作但cout
工作(這意味着邏輯沒有問題)#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.