В C++, если я прочитал целое число из строки, кажется, что на самом деле не имеет значения, использую ли я u
или d
как спецификатор преобразования, так как оба принимают даже отрицательные целые числа.Разница между% u и% d в scanf()
#include <cstdio>
using namespace std;
int main() {
int u, d;
sscanf("-2", "%u", &u);
sscanf("-2", "%d", &d);
puts(u == d ? "u == d" : "u != d");
printf("u: %u %d\n", u, u);
printf("d: %u %d\n", d, d);
return 0;
}
я копал глубже, чтобы найти, если есть какая-то разница. Я обнаружил, что
int u, d;
sscanf("-2", "%u", &u);
sscanf("-2", "%d", &d);
эквивалентно
int u, d;
u = strtoul("-2", NULL, 10);
d = strtol("-2", NULL, 10);
согласно cppreference.com.
Есть ли разница вообще между u
и d
при использовании этих спецификаторов преобразования для синтаксического анализа, то есть в формате передается scanf
функций -типа? Что это?
Ответ тот же для C и C++, правильно? Если нет, меня интересует и то, и другое.
'% u' для неподписанных и'% i' подписано. – user3813674
Я не совсем понял вопрос. Не соответствует ли ответ в документации, которую вы связали? –
'scanf' is C. Если вы используете C++, используйте соответствующий механизм C++! Это разные языки. Сказал, что: RTFM и включить предупреждения компилятора и обратить внимание на них. – Olaf