質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Q&A

解決済

1回答

3860閲覧

勉強のため、VisualStudio CodeでC言語のソースコードを実行しようとすると、エラーが出てしまう

melted-snow

総合スコア22

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

0グッド

0クリップ

投稿2020/10/30 11:02

編集2020/10/31 05:27

前提・実現したいこと

VisualStudio Codeで、C言語のコードを実行したい

  • コードは、新・明解 C言語で学ぶアルゴリズムとデータ構造(柴田望洋・著)に記載されているものを使用
  • コンパイル手順:空のフォルダを作成 -> 『新規ファイル』で下記のコードを記述 -> そのままF5『デバッグの開始』で実行 -> その際に.vscodeフォルダとexeファイルが自動で作成

エラーメッセージ(消えました)

発生場所 行:1 文字:3 + i & 'c:\Users\si910.vscode\extensions\ms-vscode.cpptools-1.1.0-insid ... アンパサンド (&) 文字は許可されていません。& 演算子は、今後使用するために予約され ています。アンパサンドを二重引用符で囲み ("&")、文字列の一部として渡 してください。 + CategoryInfo : ParserError: (:) [], ParentContainsErrorRecordException + FullyQualifiedErrorId : AmpersandNotAllowed

該当のソースコード

C

1#include <stdio.h> 2#include <stdlib.h> 3 4// a < b: -1, a > b: 1, a = b: 0 5int int_cmp(const int *a, const int *b) 6{ 7 if (*a < *b) 8 return -1; 9 else if (*a > *b) 10 return 1; 11 else 12 return 0; 13} 14 15int main(void) 16{ 17 int i, nx, ky; 18 int *x; 19 int *p; 20 21 puts("bsearch関数による探索"); 22 printf("要素数:"); 23 scanf("%d", &nx); 24 x = calloc(nx, sizeof(int)); 25 26 printf("昇順に入力してください。\n"); 27 printf("x[0]: "); 28 scanf("%d", &x[0]); 29 30 for (i = 1; i < nx; i++) { 31 do { 32 printf("x[%d]: ", i); 33 scanf("%d", &x[i]); 34 } while(x[i] < x[i - 1]); 35 } 36 37 printf("探す値: "); 38 scanf("%d", &ky); 39 40 p = bsearch(&ky, x, nx, sizeof(int), (int (*)(const void *, const void *))int_cmp); 41 42 if (p == NULL) 43 puts("探索に失敗しました。"); 44 else 45 printf("%dはx[%d]にあります。\n", ky, (int)(p - x)); 46 free(x); 47 48 return 0; 49}

試したこと

  • エラーメッセージ通りに、

scanf("%d", "&"nx)
のように、コード中の&演算子を全て""で囲んでみましたが、当然というか、エラーでした。

  • 拡張機能のC/C++をアンインストール&再インストールしてみました。エラーは出なくなりましたが、本来出力されるはずの

「bsearch関数による探索
要素数:」
がいつまでたっても出ないので、停止させました。ターミナルやデバッグコンソールなどチェックしましたが、どのタブにも形跡はありませんでした。

  • F5キーで自動生成されたexeファイルを、VScodeのターミナルから、

./bsearch01.exe
で実行すると、あっさり成功しました。
つまり、vscodeの実行機能(F5、またはF5+ctrl)では止まってしまうが、ターミナルからのコマンド実行は問題ないことになります。

成功?

コンパイラはmingwを使用していたのですが、64bitであればmingw-w64の方が良いと書かれていたので、インストールしてみました。すると、なぜかF5でちゃんと動くようになり、期待通りの結果がターミナルに表示されました。
しかし、ひとつ気になる点ができました。
デバッグコンソールに、
Thread 1 hit Breakpoint 1, main () at c:\Users"ユーザー名"\Desktop\HelloWorld_c\bsearch01.c:21
21 puts("bsearch関数による探索");
と表示されます。文字通りに解釈するなら、ブレイクポイントに行きあたったということなのでしょうが、今回はブレイクポイント(あの赤い〇)を設定していないので、どこか誤作動しているのではないかと思います。

試したこと

  • mingw-w64のセットアップでスレッドや例外処理を変えてみました。試した組み合わせは、win32/seh, posix/sjlj, posix/sehの3種類をインストールしました。しかし、表示は変わりません。

補足情報(FW/ツールのバージョンなど)

VisualStudio Code: 1.50.1(user setup)
OS: Windows_NT x64 10.0.18363
コンパイラ: gcc.exe (MinGW.org GCC Build-2) 9.2.0
コンパイラ(変更後): gcc.exe (mingw-w64版)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

pepperleaf

2020/10/30 11:12

多分、Cソースの問題ではなく、VSCodeの拡張機能(C/C++)がおかしいのでは? > + i & 'c:\Users\si910\.vscode\extensions\ms-vscode.cpptools-1.1.0-insid ... 一度、入れなおしたら、どうでしょう。
Daregada

2020/10/30 11:29

そのエラーメッセージは PowerShell が「&」が含まれたコマンドラインを実行しようとしたときに出すやつで、C言語のソースとはまったく関係ない。
tiitoi

2020/10/30 11:36

どのような操作手順でソースコードをコンパイルしようとしたのか記載してください
tiitoi

2020/10/30 12:13

こちらの環境ではコードは正しく動作したので、実行環境の問題の可能性が高いです。
guest

回答1

0

自己解決

コンパイラをMinGWからMinGW-w64に変更してみると、とりあえずは成功しました。

最後はちょっとすっきりしませんが、動くことには動くので、このあたりで終わります。

投稿2020/11/04 10:35

melted-snow

総合スコア22

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問