我在这里错过了什么?我想将用户输入的字母转换为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
th索引时)。而且你正在与未初始化的价值进行比较 - 这也是一种错误的方式。