No.7
- 回答日時:
補足: #6様。
質問が、入力方法に関するものか、その後に整数として入力成功した後の話か分からないので。'1'があるかどうかだけなら、確かにgetcの方がいいですね。(エラーチェックをする場合でもそうかも。)
入力を信用するならともかく、「もしかしたら、整数以外の入力があるかも」とか「整数入力されてもintの範囲を越えた整数が入力されたら」「複数の入力がある場合」などまで考えるといきなり難しくなりますね("%d" の書式では対応できなくなる)。まあ、書式指定をマスターすれば、純粋な文字列として入力する分にはscanfの方が柔軟かもしれない。
質問者様がどこで困っているのか、によりますね。
蛇足の部分はこちらも自力で確認しました。
No.6
- 回答日時:
「fgets で読み込みつつ特定の文字があるかどうか 1文字ずつ調べる」くらいなら, 最初から getc を使った方が簡単だと思うの>#4. まあそもそも何をしたいのかが読み取れない謎質問なわけだが.
以下は蛇足:
・#2 への補足に対しては「あなたの理解力が足りていない」と指摘.
・gets は最新の規格でめでたく削除されました>#4.
・C では文字定数 '1' の型は int なので (ちなみに C++ では char型) 「int にキャストする」がまったく無意味>#5.
No.5
- 回答日時:
補足: strchr()関数の検索する文字(ここでは'1')は(int)でキャストする、という説明をたまに見かけますが、C++ならともかくC言語ではキャストは必要ないはずです。
(C++がCの上位互換というのは厳密には「迷信」で、細かい違いがあります)。これは一般論ですが、MSのVisualStudio の VC++ でC言語プログラムを書く場合、ソースファイル名には拡張子「.c」を付けることをお勧めします。拡張子なしでファイル名を指定すると、C++の拡張子.cppがデフォルトで付いてしまうので、C++言語としてコンパイルされてしまいます。
No.4
- 回答日時:
過去に書いてある答えでよいとは思いますが、No3様で使われている scanf() 関数は非常に使い方が難しいので、fgets()関数で純粋な文字列として読み、その文字列の中に'1'という「文字」があるかどうかをstrchr()関数で判別する、という方法もあると思います。
そして、入力された文字列の中に数字(または空白文字)以外の文字があった場合は「入力は整数ではありません」などとエラーを出す(おおまかですが)というような方針。
fgets()関数で読み込まれた文字列の最後(終端の'\0'の前)に'\n'がない場合は、バッファサイズ(マクロなどで定義しておく)に1行が入りきらなかったことになるので「入力が長すぎます」とやるなどの対処も必要でしょう。
なお、gets()関数はバッファオーバーラン(ググれば分かります)の危険があり、それを回避する方法がないので使ってはいけません。(最新の規格では確か廃止されるはずだと思う。)
No.3
- 回答日時:
#2で述べられている方法でやるのが普通ですし、特に理由がない限りそちらでやるべきだと思いますが、あえて整数を入力させ、文字列操作で1があるか調べるなら例えばこんなコードでしょうか。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int
main(void)
{
int input;
scanf("%d", &input);
char *str;
asprintf(&str, "%d", input);
if (strchr(str, '1') != NULL) {
printf("'%d' has '1'\n", input);
} else {
printf("'%d' does not have '1'\n", input);
}
free(str);
return 0;
}
ちなみに、asprintfは標準の関数ではないので*BSDのlibcかglibcくらいでしか使えないと思いますが。
No.1
- 回答日時:
>C言語の文字列操作について
>整数を入力させ、その入力された整数に
文字列なのか整数なのかどちらですか?
>うまくできません。
とりあえずそのうまくいかないというプログラムを書いてください。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# [C言語] コメント文字列を無視して、数値データを読み込むプログラム部分について 5 2022/10/05 11:03
- C言語・C++・C# c言語について array[i]-‘0’ これってどーゆー意味ですか? (ちなみに16進数を10進数 5 2022/12/06 18:39
- C言語・C++・C# 至急お願いします。C言語で.imgのファイルを読み込んで1バイトづつ出力するプログラムを作りたいので 3 2023/01/16 22:49
- C言語・C++・C# C#の問題です。 文字列型の配列 s[100] にキーボードから入力された100文字以内の文字列(単 2 2022/06/22 15:18
- その他(プログラミング・Web制作) プログラミングについて(Python) 添付した画像はC言語で簡単に作ったソースで、1つの配列に5つ 3 2022/09/10 19:15
- C言語・C++・C# c言語 コマンドライン引数 4 2023/02/09 18:47
- Visual Basic(VBA) 【再々投稿】VBAのプログラムで動作しなくて困っています 8 2022/10/14 09:06
- C言語・C++・C# c言語で自然数nを入力、2以上n以下の偶数の累積sumを求めるプログラムをfor文を使って作りたいで 4 2022/11/09 14:10
- C言語・C++・C# C言語で 英文字のみからなる文字列、”Radar”、”WasItACatISaw”、”a”、””(空 5 2022/12/20 15:17
- C言語・C++・C# C言語 3 2022/10/04 15:07
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
数字以外が入力されたらエラー...
-
*をユーザーが入力した数字の数...
-
正負を反転させて出力するプロ...
-
プログラミング初心者です。 Py...
-
至急教えてください!プログラ...
-
cout関数を使っているのですが...
-
scanfでの可変引数
-
scanfが2回使えない・・・?;
-
batプログラム上で文字列を入力...
-
プログラミングの問題です 「金...
-
C言語・標準入力でquitを入力で...
-
java初心者です。入力されたの...
-
日数を計算する方法
-
C++:cinが上手く使えない
-
C言語scanf_sで何故か2回入力に...
-
C言語について
-
入力エラーの処理について。
-
scanf が無視されます
-
Linuxで入力待ちなしkeyread関...
-
Eclipseコンソール表示を、リセ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
double型が正常に認識されてい...
-
プログラミング初心者です。 Py...
-
正負を反転させて出力するプロ...
-
Excel VBAで、Application.Inpu...
-
C言語について。
-
batプログラム上で文字列を入力...
-
*をユーザーが入力した数字の数...
-
cout関数を使っているのですが...
-
漢字のソートについて
-
数字以外が入力されたらエラー...
-
Userformの入力順序をタブオー...
-
ワードで文字を入力する時の変...
-
Linuxで入力待ちなしkeyread関...
-
java初心者です。入力されたの...
-
EDITコントロールで入力できる...
-
Eclipseコンソール表示を、リセ...
-
小数か整数かを判定する方法
-
C言語scanf_sで何故か2回入力に...
-
VB.NETで16進数+16進数や16進...
-
Linuxプログラミングで、キーボ...
おすすめ情報