gpt4 book ai didi

字符转换

转载 作者:太空宇宙 更新时间:2023-11-04 01:19:00 26 4
gpt4 key购买 nike

我在这里错过了什么?我想将用户输入的字母转换为 if 语句中相应的整数。

#include <stdio.h>

int main()
{
int i=0, j=0;
int array[1000];


printf("Input letters to convert into integers: ");
do {
scanf("%d", array[i]);
i++;
} while(array[i+1] != '\n');


for(j = 0; j < i; j++){
if (array[j] == 'A')
printf("2 1 ");
else if (array[j] == 'B')
printf("2 2 ");
//and so on...

最佳答案

这里不需要 int 数组,一个简单的 char 数组就可以了。您可以使用 %s 格式说明符一次简单地获取所有这些字符。

char array[1000];
if( 1 != scanf("%999s",array) ){
fprintf(stderr,"Error in input\n");
exit(EXIT_FAILURE);
}
size_t len = strlen(array);
for( size_t i = 0; i < len; i++ ){
if( array[i] == 'A' ){
...
}
else if( .. ){

}
}

如果您需要获取空白区域 - scanf%s 格式说明符将无济于事。然后使用 fgets

char array[1000];
if( !fgets(array, 1000, stdin) ){
fprintf(stderr,"Error in input\n");
exit(EXIT_FAILURE);
}
array[strcspn(array, "\n")] = 0;
size_t len = strlen(array);
for( size_t i = 0; i < len; i++ ){
if( array[i] == 'A' ){
...
}
else if( .. ){

}
}

更好的方法是使用简单的 switch case 语句。这将使您免于编写 26 if -else 语句。

还有一点 - 不要伪装成 if-else 硬编码数据,只需将其存储在一个数组中,然后相应地使用它。

为了解释之前的问题 - 您使用了 scanf 错误的方式 - 它应该是 scanf("%d",&array[i]);scanf("%d",array+i).它是变量的地址,而不是 scanf 期望的变量值。

不仅你的代码有越界访问数组索引的潜在问题——这是未定义的行为。 (考虑当 i=999 您正在访问第 1000 索引)。而且您正在与未初始化的值进行比较 - 这又是一种错误的方法。

关于字符转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49085425/

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