Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/155.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C+中的格式说明符+; 我正在尝试理解C++编译器的行为。这是一个代码,我故意犯了两个错误: 在scanf中忘记了%ld格式说明符,只写了% 为printf添加了未知格式说明符-为long数据类型编写了%l而不是%ld #包括 #包括 使用名称空间std; int main(){ //完成代码。 int a;long b;char c;float d;double e; scanf(“%d%%c%f%lf”、&a、&b、&c、&d、&e); printf(“%d\n%l\n%c\n%f\n%lf”,a、b、c、d、e); 返回0; }_C++_Gcc_Compiler Warnings - Fatal编程技术网

C+中的格式说明符+; 我正在尝试理解C++编译器的行为。这是一个代码,我故意犯了两个错误: 在scanf中忘记了%ld格式说明符,只写了% 为printf添加了未知格式说明符-为long数据类型编写了%l而不是%ld #包括 #包括 使用名称空间std; int main(){ //完成代码。 int a;long b;char c;float d;double e; scanf(“%d%%c%f%lf”、&a、&b、&c、&d、&e); printf(“%d\n%l\n%c\n%f\n%lf”,a、b、c、d、e); 返回0; }

C+中的格式说明符+; 我正在尝试理解C++编译器的行为。这是一个代码,我故意犯了两个错误: 在scanf中忘记了%ld格式说明符,只写了% 为printf添加了未知格式说明符-为long数据类型编写了%l而不是%ld #包括 #包括 使用名称空间std; int main(){ //完成代码。 int a;long b;char c;float d;double e; scanf(“%d%%c%f%lf”、&a、&b、&c、&d、&e); printf(“%d\n%l\n%c\n%f\n%lf”,a、b、c、d、e); 返回0; },c++,gcc,compiler-warnings,C++,Gcc,Compiler Warnings,上面有一个代码段,成功编译并显示警告。为什么它没有为未知的/丢失的C++格式说明符产生错误?它是如何编译的 输出: 因为%不是一个未知的格式说明符,而是一个百分号,后跟(一个或多个)空格。您的输入流将被搜索百分号,如果没有出现预期的百分号,它将停止匹配,并返回已分配字段的数量-1 显然,这很少是编码人员的意图,因此编译器会给出警告。要更清楚地说明您想要一个真正的百分号,可以使用%%。百分比和空白对编译器来说就像你犯了错误一样,但它在形式上并不是不正确的;因此,它只是一个警告。因为%不是一个未知的

上面有一个代码段,成功编译并显示警告。为什么它没有为未知的/丢失的C++格式说明符产生错误?它是如何编译的

输出:
因为
%
不是一个未知的格式说明符,而是一个百分号,后跟(一个或多个)空格。您的输入流将被搜索百分号,如果没有出现预期的百分号,它将停止匹配,并返回已分配字段的数量-1


显然,这很少是编码人员的意图,因此编译器会给出警告。要更清楚地说明您想要一个真正的百分号,可以使用
%%
。百分比和空白对编译器来说就像你犯了错误一样,但它在形式上并不是不正确的;因此,它只是一个警告。

因为
%
不是一个未知的格式说明符,而是一个百分号,后跟(一个或多个)空格。您的输入流将被搜索百分号,如果没有出现预期的百分号,它将停止匹配,并返回已分配字段的数量-1


显然,这很少是编码人员的意图,因此编译器会给出警告。要更清楚地说明您想要一个真正的百分号,可以使用
%%
。百分比和空白对编译器来说就像你犯了错误一样,但它在形式上并不是不正确的;因此,这只是一个警告。

编译器甚至不需要告诉您这一点(谢天谢地它会告诉您!)。格式字符串和参数列表之间的不匹配是未定义的行为


%
后跟空格是无效的说明符,这也是未定义的行为。

编译器甚至不需要告诉您这一点(谢天谢地它会告诉您!)。格式字符串和参数列表之间的不匹配是未定义的行为


%
后跟空格是无效的说明符,这也是未定义的行为。

您应该将警告视为错误。他们不可忽视。:)您应该将警告视为错误。他们不可忽视。:)
#include <iostream>
#include <cstdio>
using namespace std;

int main() {
    // Complete the code.
    int a; long b; char c; float d; double e;
    scanf("%d % %c %f %lf", &a, &b, &c, &d, &e);
    printf("%d \n%l \n%c \n%f \n%lf", a, b, c, d, e);
    return 0;
}