-1

ここまでやった

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

int main()
{

char str[100];
int i=0;

printf("Enter any string: ");
scanf("%s",str);

printf("ASCII values of each characters of given string: ");
while(str[i])
     printf("%d ",str[i++]);


return 0;
}

コンパイルしようとしたときに、すべての ASCII 値を取得できませんでした。どこが間違っているのか教えてください。

4

3 に答える 3

1

初め; コードを正しくインデントします (Linux では、GNU インデントユーティリティまたはastyleを使用できます)。

すべての警告とデバッグ情報を含めてコンパイルします (例: gcc -Wall -g)。デバッガー ( gdb) を使用してステップごとに実行する方法を学びます。

次に、あなたscanf("%s", str);は危険です (少なくとも である必要があります。scanf(3)scanf("%99s", str);を参照してください) ! ユーザーが 200 文字の非常に長い「単語」 (たとえば、数字の 200 倍) を入力すると、クラッシュまたは未定義の動作が発生する可能性があります。また、スペースまたは空白のような文字まで読み取ることに注意してください。バッファを読み取る前にゼロにするのは良い習慣だと思います。だからあなたを0%sscanf

 memset (str, 0, sizeof(str));
 fgets (str, sizeof(str), stdin);

最後に、バッファリングされ stdoutた出力をフラッシュしていません ( stdio(3)setvbuf(3)fflush(3)などを参照してください...)。たぶん試してみてください

while(str[i])
  printf("%d ",str[i++]);
putchar('\n');
fflush(stdout);

への最後の呼び出しfflushはここでは役に立ちませんが、それは良い習慣です (または、すべて printfのフォーマット文字列を改行で\n終わらせるstdoutことがよくありますが、常に行バッファリングされるわけではありません!)

于 2013-10-18T10:23:04.157 に答える
0

scanf入力文字列にスペースがある場合、読み取りを停止します。fgets を使用するか、次のいずれかを実行できます。

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

int main()
{

   char str[100];
   int i=0;

   printf("Enter any string: ");
   str[i] = getchar();

   while(str[i]!='\n'){
        str[i+1] = getchar();
        i++;
   } 

   str[i] = '\0';
   printf("%s\n",str);

   i=0;
   printf("ASCII values of each characters of given string: ");

   while(str[i]!='\0'){
        printf("%d ",str[i++]);
   }

   return 0;
}

編集:

コメントであなたが尋ねた文字列の平均を見つけるには:

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

int main()
{

     char str[100];

   int sum=0;
   int average=0;
       int i=0;

    printf("Enter any string: ");
    str[i] = getchar();

    while(str[i]!='\n'){
        str[i+1] = getchar();
         i++;
    } 

    str[i] = '\0';
    printf("%s\n",str);

    i=0;
    printf("ASCII values of each characters of given string: ");

    while(str[i]!='\0'){
       sum = sum + str[i];
       printf("%d ",str[i++]);
    }

// To calculate average

   average = sum/(i-1);

   printf("\nAverage = %d\n",average);

       return 0;
}
于 2013-10-18T10:23:14.063 に答える