gpt4 book ai didi

c - 从字符串中取出一个字符并将其转换为c中的int

转载 作者:太空宇宙 更新时间:2023-11-04 08:23:32 25 4
gpt4 key购买 nike

我是 c 的新手,正在尝试编写一个控制台应用程序,它从用户的音乐项目中获取拍号和 BPM 信息,并以秒为单位返回一个小节的长度。

我想获取用户输入的拍号字符串(例如:“4/4”),分离出第一个字符(表示每小节节拍数的数字),并将其转换为整数以用于计算。

我试过的两种方法,

int beatsPerBar = timeSignature[0];

int beatsPerBar = atoi(timeSignature[0])

两者都返回相同的错误:“下标值既不是数组也不是指针也不是 vector ”。

如何正确更改此字符的变量类型?

编辑:

使用@R-Sahu 的建议。下面的代码编译和构建时没有错误或警告。

#include <stdio.h>
#include <stdlib.h>

int main()
{

char timeSignature[4];
int BPM;

printf("Enter the working time signature of your project:");
scanf("%s",&timeSignature[4]);

int beatsPerBar = timeSignature[0]-'1';

printf("Enter the beats per minute:");
scanf("%i",&BPM);

printf("%i\n", beatsPerBar);

return 0;

}

但是,当我使用以下值测试代码时

timeSignature = "4/4"
BPM = 180

我得到一个 -47 的结果整数(计算器检查说它应该返回 45)。

我做错了什么?显然,我对编码和用于表示字符值的整数的理解不应该是这样。谁能分享有关此主题的广泛教程的链接?

最佳答案

使用

int beatsPerBar = atoi(timeSignature[0])

应该会导致编译器错误。 atoi 的输入参数类型是char const*timeSignature[0] 不是。

int beatsPerBar = timeSignature[0];

在句法上是正确的,但在语义上是错误的。这会将 beatsPerBar 的值设置为用于表示字符 4 的整数值。如果您的平台使用 ASCII 编码,则该值为 52

你应该使用:

int beatsPerBar = timeSignature[0] - '0';

获取分配给 beatsPerBar 的数字 4

如果您想更加小心,您应该添加以下检查。

int beatsPerBar = 0;
if ( isdigit(timeSignature[0]) )
{
beatsPerBar = timeSignature[0] - '0';
}
else
{
// Deal with error.
}

关于c - 从字符串中取出一个字符并将其转换为c中的int,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32236867/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com