C 如果为,则添加变量

C 如果为,则添加变量,c,for-loop,if-statement,C,For Loop,If Statement,我想显示大于0的变量hm,但它总是显示0。我怎样才能解决这个问题 #include <stdio.h> #include <stdlib.h> int main(void) { long long result = 1; int n; int i; char str[13500]; int hm=0; scanf("%d", &n); for(i=0;i<n;i++) {

我想显示大于0的变量
hm
,但它总是显示0。我怎样才能解决这个问题

#include <stdio.h>
#include <stdlib.h>
int main(void) {
    long long result = 1;
    int n;
    int i;
    char str[13500];
    int hm=0;  
    scanf("%d", &n);    
    for(i=0;i<n;i++) {
        result *= 9;
        sprintf(str, "%lld", result);
        printf("%c ",str[0]);
        if (str[0] == 9) {
            hm=hm+1;
        }      
    }
    printf("%d", hm); 
    return 0;
}
#包括
#包括
内部主(空){
长结果=1;
int n;
int i;
char-str[13500];
int-hm=0;
scanf(“%d”和“&n”);

for(i=0;i
str[0]==9
看起来是错误的。通常,数字字符的字符代码不等于它们所表示的数字。例如,9的字符代码在ASCII中为57(0x39)


若要从固定字符(字符文字)中获取字符代码,请在字符周围加上
'
。条件应为
str[0]='9'

str[0]==9
看起来有误。通常,数字字符的字符代码与其表示的数字不相等。例如,9的字符代码为57(0x39)ASCII格式


要从固定字符(字符文字)获取字符代码,请使用
'
环绕字符。条件应为
str[0]='9'

这是因为使用“sprintf”时,它会将内容作为字符串存储在缓冲区str中

使用与printf使用格式时打印的文本相同的文本组成字符串,但内容不是打印,而是作为C字符串存储在 str指向的缓冲区。 缓冲区的大小应该足够大,以包含整个结果字符串(请参阅snprintf以获得更安全的版本)。 终止的空字符将自动附加在内容之后。 在format参数之后,函数至少需要format所需的其他参数

链接:

所以,只需将“如果”语句更改为

if (str[0] == '9')

通过将值9括在单引号之间将其视为一个字符。希望这对您有用。

这是因为当您使用“sprintf”时,它会将内容作为字符串存储在缓冲区str中

使用与printf使用格式时打印的文本相同的文本组成字符串,但内容不是打印,而是作为C字符串存储在 str指向的缓冲区。 缓冲区的大小应该足够大,以包含整个结果字符串(请参阅snprintf以获得更安全的版本)。 终止的空字符将自动附加在内容之后。 在format参数之后,函数至少需要format所需的其他参数

链接:

所以,只需将“如果”语句更改为

if (str[0] == '9')

通过将值9括在单引号之间将其视为一个字符。希望这对您有用。

您的意思是如果(str[0]='9'){
9
作为普通数字将是不可打印的字符。“你好,StackOverflow!”确实如此!不要分配像
char str[13500]这样的大型数组
本地,或者您可能会遇到堆栈溢出。@Lundin-13kib不会对任何桌面或服务器系统(也不会对大多数手机造成压力;其他嵌入式系统可能会是另一回事)。对于兆字节大小,是的-需要小心。但对于几十KB的大小,则不需要小心。
char str[13500];
为什么?一个简单的
char str[64]
会满足你的需要。@JonathanLeffler我知道。在一些低端微控制器上,你有大约100字节的堆栈。谁在乎呢,最好不要在堆栈上分配大数据,不管系统是什么。你的意思是
如果(str[0]='9'){
9
,因为一个普通数字将是不可打印的字符。“你好,StackOverflow!”的确如此!不要在本地分配像
char str[13500];
这样的大型数组,否则可能会出现堆栈溢出。@Lundin-13 KiB不会对任何桌面或服务器系统(也不会对大多数手机造成压力;其他嵌入式系统可能会不同).在兆字节大小时,是的-需要小心。但在数十千字节时不需要小心。
char-str[13500];
…为什么?一个简单的
char-str[64]
会满足您的需要。@JonathanLeffler我知道。在一些低端微控制器上,您有大约100字节的堆栈。谁在乎呢,最好不要在堆栈上分配大数据,不管系统是什么。