整数と文字列を X という変数に格納して表示したいと考えています。
int X;
printf("enter a number or a name")
scanf("%d", &X);
printf("%d", X);
明らかに、String 型と int 型の両方で変数 X を宣言する必要がありますが、C でそれを行うにはどうすればよいでしょうか? ありがとう
そんなことはできません。確かに、同じ変数に 2 つの型を格納することはできますが (a の動作を調べます)、それらの 1つを指定して、文字列または数値をスキャンするunion
ことはできません。scanf()
X
文字列に対して文字列として宣言し、文字列から数値を読み取ろうとするためにscanf()
使用します。ゼロをstrtol()
返し、設定されている場合(ユーザーが入力した場合もゼロを返すため、これは重要です)、変換は失敗し、番号がなかったため、名前が付けられました。strtol()
errno
strtol()
0
コメントで、あなたは(最終的に)あなたが達成しようとしていることを示しました:
プログラムを終了するには、数字または exit という単語を入力するようにユーザーに求めます。
誤って、文字列または整数を同じ変数に格納することがこれを行う方法であると想定しました。そうではありません。
一般的な概要は次のとおりです。
入力行を文字列に読み込みます。これに使用fgets()
します。
入力行が string かどうかを確認します"exit"
。fgets()
文字列に改行 ( '\n'
) 文字が残ることに注意してください。それを許可する必要があります。文字列値を比較するには、 を使用しますstrcmp()
。入力文字列が と一致する場合"exit"
、プログラムを終了します。
文字列が でない場合は、"exit"
それが整数であるかどうかを確認します。より正確には、整数を表す一連の文字であるかどうかを確認します。これに使えますstrtol()
。たとえば、入力文字列が の場合"123"
、値strtol()
が返されます。 また、文字列で表される整数値が範囲外かどうか、または整数値を表しているかどうかもわかります。入力が、または、またはの場合に何をしたいかを決定します。long
123
strtol()
"foobar"
"-123"
""
これらすべての関数のドキュメントを注意深く読みたいと思うでしょう。
重要な点は、入力行を保持するためのの配列と、文字列が整数の表現を保持する場合に変換された整数値を保持するための整数 (または) の2 つの変数が必要だということです。char
int
long
(率直に言って、これは宿題の匂いがするので、コードを提供していません。)
あなたは本当にそれを行うことはできません. ただし、入力を文字列として読み取り、int に変換することはできます。
char input[25];
int value = 0;
fgets(input, 25, stdin);
value = atoi(input);
printf("String Value = %s and Int Value = %d", input, value);
struct StringAndInt
{
int theInt;
char *theString; /* or whatever type you want */
};
struct StringAndInt X;
C++ にはより優れたオプションがあります。