打印#define的常量

Kex*_*the 4 c printf constants literals c-preprocessor

#include<stdio.h>

#define UPPER   999999
#define LOWER   11111

int main(void)
{
//  Local Declarations
double price = 89.99;
char grade = 'B';
int age = 97;

//  Statements
printf("Homework 2:\n\nUsing printf\n");
printf("  age = %c, age\n");
printf("grade = %d, grade\n");
printf("price = %f, price\n\n");

printf("Using both printf and scanf\n");
printf("Enter a new value for age: ");
scanf("%d", &age);
printf("Enter a new value for grade: ");
scanf("%c", &grade);
printf("Enter a new value for price: ");
scanf("%lf", &price);

printf("Print the new values\n");
printf("  age = %d \n", age);
printf("grade = %c\n", grade);
printf("price = %lf\n\n", price);

print("\n\nPrinting two defined constants: "UPPER" and "LOWER"\n");
print("UPPER = %08d\n", UPPER);
print("LOWER = %08d\n", LOWER);



return 0;
}   //  end of main
Run Code Online (Sandbox Code Playgroud)

以上是我的程序,即时通讯应该修复它。我已经处理了将近3个小时,现在仍然可以找出问题所在。我有一个错误和一些警告。

warning: too few arguments for format
Run Code Online (Sandbox Code Playgroud)

正文中的一些警告

error: expected ')' before numeric constant 
Run Code Online (Sandbox Code Playgroud)

此错误是由于打印两个常量。

use*_*250 8

我来这里寻找这个问题的答案,似乎大多数人只是沉迷于语法错误而不是关心实际的问题是什么。您可以将 printf 与#defined 值一起使用,就像它们是普通变量一样。但是,您必须密切注意类型。

#define HEXNUM 0xA8
#define NUMBER 129
#define STRING "somestring"

#include <stdio.h>

int main(void) {
    printf("hex number: %x\n", HEXNUM);
    printf("number: %d\n", NUMBER);
    printf("string: %s", STRING);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)


alk*_*alk 7

print("\n\nPrinting two defined constants: "UPPER_S" and "LOWER_S"\n");
Run Code Online (Sandbox Code Playgroud)

仅当UPPER_SLOWER_S分别#define

#define UPPER_S  "999999"
#define LOWER_S  "11111"
Run Code Online (Sandbox Code Playgroud)

或者,您可以使用以下两个宏对数字#defines 进行字符串化:

#define _STRINGIFY(s) #s
#define STRINGIFY(s) _STRINGIFY(s)
Run Code Online (Sandbox Code Playgroud)

然后做

print("\n\nPrinting two defined constants: "STRINGIFY(UPPER)" and "STRINGIFY(LOWER)"\n");
Run Code Online (Sandbox Code Playgroud)

  • 对一个非常糟糕的问题的非常有用的答案 - stringify 刚刚在将 #define 数值转换为 sscanf() 格式字符串方面保存了我的培根 (2认同)

Jor*_*aye 1

您需要将 printf 参数放在引号之外。

当前的:

//  Statements
printf("Homework 2:\n\nUsing printf\n");
printf("  age = %c, age\n");
printf("grade = %d, grade\n");
printf("price = %f, price\n\n");
Run Code Online (Sandbox Code Playgroud)

应该:

//  Statements
printf("Homework 2:\n\nUsing printf\n");
printf("  age = %c\n", age);
printf("grade = %d\n", grade);
printf("price = %f\n\n", price);
Run Code Online (Sandbox Code Playgroud)