1

これを機能させるのに問題があります。私がやりたいのは、ユーザー入力の例1 2 3を取り、各文字を 2 倍して、出力が になるようにすること2 4 6です。最終的に、数字の長い文字列を取得し、文字列内の他のすべての文字を 2 で乗算し、残りはそのままにします。

私が今抱えている問題は、実際の整数ではなく 2 を ASCII 値に掛けていると思うことです。数字のみで16以下など。私はCでのプログラミングが初めてで、学ぶためにこれを行っています。

#include <stdio.h>


int main(void){


char numbers[17];
int i;
    printf("Please enter number\n");
    scanf("%s", &numbers);

    for(int i=0;i<strlen(numbers);i++){
        printf("%c\n",numbers[i] * 2);
    }

}
4

3 に答える 3

2

プログラムの2つの問題

1)

scanf("%s", numbers);

2)

printf("%d\n",(numbers[i] - '0') * 2);

これが変更されたプログラムです

#include <stdio.h>
#include <string.h>

int main()
{
    char numbers[17];
    int i, len;
    printf("Please enter number\n");
    scanf("%s", numbers);

    len = strlen(numbers);

    for(int i=0;i<len;i++)
    {
        printf("%d\n",(numbers[i] - '0') * 2);
    }

}

また、避ける方が良いですscanf-http ://c-faq.com/stdio/scanfprobs.html

于 2012-12-18T00:35:08.747 に答える
1

atoi次のような関数を使用してみてください。

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

int main(void){


char numbers[17];
int i;
    printf("Please enter number\n");
    scanf("%s", numbers);

    for(i=0;i<strlen(numbers);i++){
        printf("%c\n", atoi(numbers[i]) * 2);
    }
    return 0;
}
于 2012-12-18T00:30:15.147 に答える
1

次のようなものがあなたが求めているものかもしれません。ASCII 数字が含まれていると想定numbers[i]し、対応する整数に変換し (ASCII 値をゼロから減算することによって)、2 を掛けてから、その結果に ASCII ゼロの値を追加します。

printf( "%c\n", ( numbers[i] - '0' ) * 2 + '0' );

これは、文字 0 ~ 4 で機能します。OP を読んでも、数字 5 ~ 9 に何が必要かは明確ではありません。

于 2012-12-18T00:30:59.663 に答える