私のコードは
#include <stdio.h>
int main()
{
int name;
scanf("%d",&name);
printf("%d",name);
}
「Hello」、「World」、「Good」などを入力すると、なぜ 2 と表示されなければならないのですか? なぜ 2 ではないのですか?文字列をスキャンして ASCII コードを出力したい場合、どうすればよいですか? ありがとうございました
scanf
数値のように見えないものを入力したときにエラーを返す可能性が最も高い戻り値をチェックしていません (たとえばHello
、World
はGood
すべて無効な入力です)。
つまり、変数name
が書き込まれていないため、printf
呼び出しは実際には未定義の動作を示しているため (初期化されていない変数にアクセスすることにより)、おそらく2
.
ただし、未定義の動作を呼び出しているため、技術的には何でも取得できた可能性があることに注意してください (そうである必要はありませんでした2
)。
「Hello」、「World」、「Good」などを入力すると、なぜ 2 と表示されなければならないのですか? なぜ 2 ではないのですか?
これは、未定義の動作を呼び出しているためです。あなたは何でも手に入れるでしょう。場合によっては、目的の出力が得られることもあります。場合によっては、目的の出力が得られることもあります。誰もが望む出力が得られない場合があります。
文字列をスキャンして ASCII コードを出力したい場合、どうすればよいですか?
関数を使用getchar
して文字列を「文字ごと」に読み取り、指定子を使用して各文字の ASCII 値を出力し%d
ます。
#include <stdio.h>
int main()
{
char name;
while((name = getchar()) != '\n')
printf("%c\t%d\n",name,name);
}
注:私のコードでは、配列を使用して文字列を格納していません。文字列の長さは任意です。
入力した文字列の ascii 値を出力するには:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(){
char array[100];
int i=0;
printf("Enter string : ");
scanf("%s",array); // fixed as suggested in comments
for(i=0;i<strlen(array);i++){
printf("%d-",array[i]);
}
printf("\n");
return 0;
}
このコードの出力:
Enter string : hello
104-101-108-108-111-
編集:
コメントで善良な人々が指摘したように...入力サイズが決して超えないと思われる値に対して配列サイズが定義されていることを確認してください...