我在这里缺少什么?我想将用户输入的字母转换为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...
答案 0 :(得分:4)
这里不需要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
索引时考虑。而且你正在与未初始化的价值进行比较 - 这也是一种错误的方式。