different result from (using namespace std; cin …) vs (std::cin)
$begingroup$
While working on this online judge problem, I encountered a strange behavior: the below code, intended to read, line-by-line, 5-tuples of numbers representing points (x1,y1), (x2,y2) and p for a p-norm, and output their distance, was judged wrong:
#include <bits/stdc++.h>
int main()
{
float x1,y1,x2,y2,p,res;
while (std::cin>>x1>>y1>>x2>>y2>>p) {
res = pow( pow( abs(x1-x2) ,p) + pow( abs(y1-y2) ,p) ,(1/p));
printf("%.10fn",res);
}
return 0;
}
whereas the barely different code:
#include <bits/stdc++.h>
using namespace std;
int main()
{
float x1,y1,x2,y2,p,res;
while (cin>>x1>>y1>>x2>>y2>>p) {
res = pow( pow( abs(x1-x2) ,p) + pow( abs(y1-y2) ,p) ,(1/p));
printf("%.10fn",res);
}
return 0;
}
WAS judged correct. All I changed from one to the other was using the namespace std, and substituting cin by std::cin. My understanding was that "using namespace std" here means the compiler interprets all occurrences of "cout" as "std::cout" but I guess something subtler is going on. The reason I'm interested is that I was advised to avoid using namespaces to improve readability in the future when working with multiple files -- however doing so here mysteriously appears to be wrong.
c++ beginner
New contributor
$endgroup$
|
show 1 more comment
$begingroup$
While working on this online judge problem, I encountered a strange behavior: the below code, intended to read, line-by-line, 5-tuples of numbers representing points (x1,y1), (x2,y2) and p for a p-norm, and output their distance, was judged wrong:
#include <bits/stdc++.h>
int main()
{
float x1,y1,x2,y2,p,res;
while (std::cin>>x1>>y1>>x2>>y2>>p) {
res = pow( pow( abs(x1-x2) ,p) + pow( abs(y1-y2) ,p) ,(1/p));
printf("%.10fn",res);
}
return 0;
}
whereas the barely different code:
#include <bits/stdc++.h>
using namespace std;
int main()
{
float x1,y1,x2,y2,p,res;
while (cin>>x1>>y1>>x2>>y2>>p) {
res = pow( pow( abs(x1-x2) ,p) + pow( abs(y1-y2) ,p) ,(1/p));
printf("%.10fn",res);
}
return 0;
}
WAS judged correct. All I changed from one to the other was using the namespace std, and substituting cin by std::cin. My understanding was that "using namespace std" here means the compiler interprets all occurrences of "cout" as "std::cout" but I guess something subtler is going on. The reason I'm interested is that I was advised to avoid using namespaces to improve readability in the future when working with multiple files -- however doing so here mysteriously appears to be wrong.
c++ beginner
New contributor
$endgroup$
$begingroup$
I don't have access to test cases from Kattis; however the best I can offer in terms of replication is to ask you to submit both versions at the Kattis link in the post; the "wrong" one fails test case 2
$endgroup$
– user191196
4 hours ago
2
$begingroup$
Sorry, but this is off-topic here. This site is for working code only. The online judge seems to be the problem since the only difference isusing namespace std
. Your best bet is to contact kattis. If you want this to be on-topic here, you can edit your question to ask how to improve either one of the two versions.
$endgroup$
– Null
4 hours ago
1
$begingroup$
The use of a non-standard include filebits/stdc++.h
is not good practice.
$endgroup$
– Edward
4 hours ago
$begingroup$
@Null it seems that you're saying there should be no difference -- which is exactly what I'm calling into question. If they are the same thing, why the side effects. and I will stop using bits, thanks. I wonder if that is causing some sort of clash.
$endgroup$
– user191196
4 hours ago
$begingroup$
Without the test cases we can't really say what the problem is. You could try to prefix all calls topow()
andabs()
withstd::
as they are in the standard namespace, too.
$endgroup$
– Null
3 hours ago
|
show 1 more comment
$begingroup$
While working on this online judge problem, I encountered a strange behavior: the below code, intended to read, line-by-line, 5-tuples of numbers representing points (x1,y1), (x2,y2) and p for a p-norm, and output their distance, was judged wrong:
#include <bits/stdc++.h>
int main()
{
float x1,y1,x2,y2,p,res;
while (std::cin>>x1>>y1>>x2>>y2>>p) {
res = pow( pow( abs(x1-x2) ,p) + pow( abs(y1-y2) ,p) ,(1/p));
printf("%.10fn",res);
}
return 0;
}
whereas the barely different code:
#include <bits/stdc++.h>
using namespace std;
int main()
{
float x1,y1,x2,y2,p,res;
while (cin>>x1>>y1>>x2>>y2>>p) {
res = pow( pow( abs(x1-x2) ,p) + pow( abs(y1-y2) ,p) ,(1/p));
printf("%.10fn",res);
}
return 0;
}
WAS judged correct. All I changed from one to the other was using the namespace std, and substituting cin by std::cin. My understanding was that "using namespace std" here means the compiler interprets all occurrences of "cout" as "std::cout" but I guess something subtler is going on. The reason I'm interested is that I was advised to avoid using namespaces to improve readability in the future when working with multiple files -- however doing so here mysteriously appears to be wrong.
c++ beginner
New contributor
$endgroup$
While working on this online judge problem, I encountered a strange behavior: the below code, intended to read, line-by-line, 5-tuples of numbers representing points (x1,y1), (x2,y2) and p for a p-norm, and output their distance, was judged wrong:
#include <bits/stdc++.h>
int main()
{
float x1,y1,x2,y2,p,res;
while (std::cin>>x1>>y1>>x2>>y2>>p) {
res = pow( pow( abs(x1-x2) ,p) + pow( abs(y1-y2) ,p) ,(1/p));
printf("%.10fn",res);
}
return 0;
}
whereas the barely different code:
#include <bits/stdc++.h>
using namespace std;
int main()
{
float x1,y1,x2,y2,p,res;
while (cin>>x1>>y1>>x2>>y2>>p) {
res = pow( pow( abs(x1-x2) ,p) + pow( abs(y1-y2) ,p) ,(1/p));
printf("%.10fn",res);
}
return 0;
}
WAS judged correct. All I changed from one to the other was using the namespace std, and substituting cin by std::cin. My understanding was that "using namespace std" here means the compiler interprets all occurrences of "cout" as "std::cout" but I guess something subtler is going on. The reason I'm interested is that I was advised to avoid using namespaces to improve readability in the future when working with multiple files -- however doing so here mysteriously appears to be wrong.
c++ beginner
c++ beginner
New contributor
New contributor
New contributor
asked 4 hours ago
user191196user191196
97
97
New contributor
New contributor
$begingroup$
I don't have access to test cases from Kattis; however the best I can offer in terms of replication is to ask you to submit both versions at the Kattis link in the post; the "wrong" one fails test case 2
$endgroup$
– user191196
4 hours ago
2
$begingroup$
Sorry, but this is off-topic here. This site is for working code only. The online judge seems to be the problem since the only difference isusing namespace std
. Your best bet is to contact kattis. If you want this to be on-topic here, you can edit your question to ask how to improve either one of the two versions.
$endgroup$
– Null
4 hours ago
1
$begingroup$
The use of a non-standard include filebits/stdc++.h
is not good practice.
$endgroup$
– Edward
4 hours ago
$begingroup$
@Null it seems that you're saying there should be no difference -- which is exactly what I'm calling into question. If they are the same thing, why the side effects. and I will stop using bits, thanks. I wonder if that is causing some sort of clash.
$endgroup$
– user191196
4 hours ago
$begingroup$
Without the test cases we can't really say what the problem is. You could try to prefix all calls topow()
andabs()
withstd::
as they are in the standard namespace, too.
$endgroup$
– Null
3 hours ago
|
show 1 more comment
$begingroup$
I don't have access to test cases from Kattis; however the best I can offer in terms of replication is to ask you to submit both versions at the Kattis link in the post; the "wrong" one fails test case 2
$endgroup$
– user191196
4 hours ago
2
$begingroup$
Sorry, but this is off-topic here. This site is for working code only. The online judge seems to be the problem since the only difference isusing namespace std
. Your best bet is to contact kattis. If you want this to be on-topic here, you can edit your question to ask how to improve either one of the two versions.
$endgroup$
– Null
4 hours ago
1
$begingroup$
The use of a non-standard include filebits/stdc++.h
is not good practice.
$endgroup$
– Edward
4 hours ago
$begingroup$
@Null it seems that you're saying there should be no difference -- which is exactly what I'm calling into question. If they are the same thing, why the side effects. and I will stop using bits, thanks. I wonder if that is causing some sort of clash.
$endgroup$
– user191196
4 hours ago
$begingroup$
Without the test cases we can't really say what the problem is. You could try to prefix all calls topow()
andabs()
withstd::
as they are in the standard namespace, too.
$endgroup$
– Null
3 hours ago
$begingroup$
I don't have access to test cases from Kattis; however the best I can offer in terms of replication is to ask you to submit both versions at the Kattis link in the post; the "wrong" one fails test case 2
$endgroup$
– user191196
4 hours ago
$begingroup$
I don't have access to test cases from Kattis; however the best I can offer in terms of replication is to ask you to submit both versions at the Kattis link in the post; the "wrong" one fails test case 2
$endgroup$
– user191196
4 hours ago
2
2
$begingroup$
Sorry, but this is off-topic here. This site is for working code only. The online judge seems to be the problem since the only difference is
using namespace std
. Your best bet is to contact kattis. If you want this to be on-topic here, you can edit your question to ask how to improve either one of the two versions.$endgroup$
– Null
4 hours ago
$begingroup$
Sorry, but this is off-topic here. This site is for working code only. The online judge seems to be the problem since the only difference is
using namespace std
. Your best bet is to contact kattis. If you want this to be on-topic here, you can edit your question to ask how to improve either one of the two versions.$endgroup$
– Null
4 hours ago
1
1
$begingroup$
The use of a non-standard include file
bits/stdc++.h
is not good practice.$endgroup$
– Edward
4 hours ago
$begingroup$
The use of a non-standard include file
bits/stdc++.h
is not good practice.$endgroup$
– Edward
4 hours ago
$begingroup$
@Null it seems that you're saying there should be no difference -- which is exactly what I'm calling into question. If they are the same thing, why the side effects. and I will stop using bits, thanks. I wonder if that is causing some sort of clash.
$endgroup$
– user191196
4 hours ago
$begingroup$
@Null it seems that you're saying there should be no difference -- which is exactly what I'm calling into question. If they are the same thing, why the side effects. and I will stop using bits, thanks. I wonder if that is causing some sort of clash.
$endgroup$
– user191196
4 hours ago
$begingroup$
Without the test cases we can't really say what the problem is. You could try to prefix all calls to
pow()
and abs()
with std::
as they are in the standard namespace, too.$endgroup$
– Null
3 hours ago
$begingroup$
Without the test cases we can't really say what the problem is. You could try to prefix all calls to
pow()
and abs()
with std::
as they are in the standard namespace, too.$endgroup$
– Null
3 hours ago
|
show 1 more comment
0
active
oldest
votes
Your Answer
StackExchange.ifUsing("editor", function () {
return StackExchange.using("mathjaxEditing", function () {
StackExchange.MarkdownEditor.creationCallbacks.add(function (editor, postfix) {
StackExchange.mathjaxEditing.prepareWmdForMathJax(editor, postfix, [["\$", "\$"]]);
});
});
}, "mathjax-editing");
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "196"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: false,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: null,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
user191196 is a new contributor. Be nice, and check out our Code of Conduct.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fcodereview.stackexchange.com%2fquestions%2f212428%2fdifferent-result-from-using-namespace-std-cin-vs-stdcin%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
0
active
oldest
votes
0
active
oldest
votes
active
oldest
votes
active
oldest
votes
user191196 is a new contributor. Be nice, and check out our Code of Conduct.
user191196 is a new contributor. Be nice, and check out our Code of Conduct.
user191196 is a new contributor. Be nice, and check out our Code of Conduct.
user191196 is a new contributor. Be nice, and check out our Code of Conduct.
Thanks for contributing an answer to Code Review Stack Exchange!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
Use MathJax to format equations. MathJax reference.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fcodereview.stackexchange.com%2fquestions%2f212428%2fdifferent-result-from-using-namespace-std-cin-vs-stdcin%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
$begingroup$
I don't have access to test cases from Kattis; however the best I can offer in terms of replication is to ask you to submit both versions at the Kattis link in the post; the "wrong" one fails test case 2
$endgroup$
– user191196
4 hours ago
2
$begingroup$
Sorry, but this is off-topic here. This site is for working code only. The online judge seems to be the problem since the only difference is
using namespace std
. Your best bet is to contact kattis. If you want this to be on-topic here, you can edit your question to ask how to improve either one of the two versions.$endgroup$
– Null
4 hours ago
1
$begingroup$
The use of a non-standard include file
bits/stdc++.h
is not good practice.$endgroup$
– Edward
4 hours ago
$begingroup$
@Null it seems that you're saying there should be no difference -- which is exactly what I'm calling into question. If they are the same thing, why the side effects. and I will stop using bits, thanks. I wonder if that is causing some sort of clash.
$endgroup$
– user191196
4 hours ago
$begingroup$
Without the test cases we can't really say what the problem is. You could try to prefix all calls to
pow()
andabs()
withstd::
as they are in the standard namespace, too.$endgroup$
– Null
3 hours ago