If 语句被忽略 (C++)
If statement being ignored (C++)
我写这段代码是为了查看一个数字有多少位。我假设用户使用的数字不超过四位。由于某种原因,代码跳过了 if 语句。我检查了与此相关的其他问题,但没有相同的错误。你能帮助我吗?
这是我写的代码:
#include "stdafx.h"
int main()
{
char d1;
char d2;
char d3;
char d4;
printf("Please enter a number with four or less digits:");
scanf("%c%c%c%c", &d1, &d2, &d3, &d4);
printf("%c%c%c%c\n", d1, d2, d3, d4);
int d1v2 = d1;
int d2v2 = d2;
int d3v2 = d3;
int d4v2 = d4;
printf("%c%c%c%c\n", d1v2, d2v2, d3v2, d4v2);
int num = (d1v2 * 1000) + (d2v2 * 100) + (d3v2 * 10) + d4v2;
printf("%d", num);
int numv2 = num;
if (numv2 < 10) {
printf("Your number has 1 digit\n");
}
else if (numv2 >= 10 && numv2 < 100) {
printf("Your number has 2 digits\n");
}
else if (numv2 >= 100 && numv2 < 1000) {
printf("Your number has 3 digits\n");
}
else if (numv2 >= 1000 && numv2 < 10000) {
printf("Your number has 4 digits\n");
}
}
我不确定您是否知道这段代码中发生了什么:
int d1v2 = d1;
int d2v2 = d2;
int d3v2 = d3;
int d4v2 = d4;
printf("%c%c%c%c\n", d1v2, d2v2, d3v2, d4v2);
int num = (d1v2 * 1000) + (d2v2 * 100) + (d3v2 * 10) + d4v2;
printf("%d", num);
int numv2 = num;
d1、d2、d3 和 d4 是 char 类型,当您将它们转换为 int 类型时,您得到的是给定字符的 ASCII 值 -> wiki。
要完成这项工作,您可以尝试以下示例:
int d1v2 = d1 - '0';
请注意,还有许多其他方法可以获取特定数值。
然后在您的 printf 中将显示类型从 char (%c) 更改为 int (%i)。
此时你从字符串到整数的转换应该可以工作,但有一个小问题。
你应该多想想当有人只输入例如 3 个数字时会发生什么。您知道 scanf 之后 d4 变量中存储了什么吗?
但是我的朋友,我更愿意把你留给下一个挑战:-)
我写这段代码是为了查看一个数字有多少位。我假设用户使用的数字不超过四位。由于某种原因,代码跳过了 if 语句。我检查了与此相关的其他问题,但没有相同的错误。你能帮助我吗? 这是我写的代码:
#include "stdafx.h"
int main()
{
char d1;
char d2;
char d3;
char d4;
printf("Please enter a number with four or less digits:");
scanf("%c%c%c%c", &d1, &d2, &d3, &d4);
printf("%c%c%c%c\n", d1, d2, d3, d4);
int d1v2 = d1;
int d2v2 = d2;
int d3v2 = d3;
int d4v2 = d4;
printf("%c%c%c%c\n", d1v2, d2v2, d3v2, d4v2);
int num = (d1v2 * 1000) + (d2v2 * 100) + (d3v2 * 10) + d4v2;
printf("%d", num);
int numv2 = num;
if (numv2 < 10) {
printf("Your number has 1 digit\n");
}
else if (numv2 >= 10 && numv2 < 100) {
printf("Your number has 2 digits\n");
}
else if (numv2 >= 100 && numv2 < 1000) {
printf("Your number has 3 digits\n");
}
else if (numv2 >= 1000 && numv2 < 10000) {
printf("Your number has 4 digits\n");
}
}
我不确定您是否知道这段代码中发生了什么:
int d1v2 = d1;
int d2v2 = d2;
int d3v2 = d3;
int d4v2 = d4;
printf("%c%c%c%c\n", d1v2, d2v2, d3v2, d4v2);
int num = (d1v2 * 1000) + (d2v2 * 100) + (d3v2 * 10) + d4v2;
printf("%d", num);
int numv2 = num;
d1、d2、d3 和 d4 是 char 类型,当您将它们转换为 int 类型时,您得到的是给定字符的 ASCII 值 -> wiki。 要完成这项工作,您可以尝试以下示例:
int d1v2 = d1 - '0';
请注意,还有许多其他方法可以获取特定数值。 然后在您的 printf 中将显示类型从 char (%c) 更改为 int (%i)。 此时你从字符串到整数的转换应该可以工作,但有一个小问题。
你应该多想想当有人只输入例如 3 个数字时会发生什么。您知道 scanf 之后 d4 变量中存储了什么吗? 但是我的朋友,我更愿意把你留给下一个挑战:-)