intで宣言した変数と変数の足し算を行い、intの変数に代入すると、
シンタックスエラーを起こしてしまいます。

例)

int A;
int B;
int C;

C = A + B

C2061: 構文エラー : 識別子 'C' がシンタックスエラーを起こしました。

A 回答 (8件)

いきなりthenというのも問題ですが、



if構文を使うなら条件式をカッコで囲まないとダメです。

if(c>d)
a+b;

という具合に書くか、
あるいはもっと明示的に

if(c>d){
a+b;
}

と書きます。{}はなくても良いですが、条件式は区切らないとシンタックスエラーになります。
    • good
    • 0
この回答へのお礼

きゃー、ありがとうございます!
できました!
感謝感激です。
()をつけないとダメなんですね。
ほんと、初歩的なことですみません。

お礼日時:2002/03/22 16:47

> if c > d then;


VB等のプログラムをされていた方なのでしょうか?
Cでは、if c>d then ... endifではなく、
if (c > d) {
...
}
と記述します。もちろんスペースの空け方はお好みで。
    • good
    • 0
この回答へのお礼

はい、ずっとVBをやっていました。
thenはないんですね。
お恥ずかしいです。
ようやくできました。
あとは、他で質問した、関数から関数が呼ばればOKです。
ありがとうございました!!

お礼日時:2002/03/22 16:48

エラー行があるならCのビューにフォーカスを置いて<編集>-<ジャンプ>でそれを入力すると該当行番号にカーソルがいきます。



VCのヘルプ検索では以下のようになっています。

コンパイラ エラー C2061
構文エラー : 識別子 'identifier' が構文エラーを起こしました。

予期しない位置で identifier を見つけました。このエラーは初期化子をかっこで囲んだときに発生します。このエラーをなくすには、宣言子をかっこで囲むか、宣言子を typedef にしてください。
--------------------

本当にそういった単純なプログラムになっているならこういった類のエラーは出ないはずですが。ちょっとどうやったらそうなるのか再現できませんでした。

一度他の部分は全て/* */でコメントアウトして問題だと思われる部分だけでコンパイルしてみては?単純化して問題部分に絞ることで見やすくなるはずです。

この回答への補足

ジャンプでエラー行に移動することができました。
ありがとうございます。

全体的に補足ですが、

C = A + B;

の行でエラーになっているのではありませんでした。
ごめんなさい。
次の行で、

if c > d then;
と書いているのですが、この文でエラーになっています。
dはint型です。

補足日時:2002/03/22 16:14
    • good
    • 0

#include <stdio.h>



main()
{
int A;
int B;
int C;

A = 1;
B = 1;

C = A + B;
}

同様に上記のようなプログラムを作成しました。
特に問題はなく、2という結果が返ります。

エラーというのはコンパイル時に発生するのでしょうか?

上記のようなシンプルなプログラムでおっしゃるようなエラーを発生させることが
できませんでした。

上記以外の機能があるようでしたら、そのへんもみてみたらいかがでしょうか?
すみません、回答になってなくて・・・
    • good
    • 0

1.識別子名に全角文字を使用していませんか?


2.その前の行に;や}が抜けていませんか?

この行を削除してみて、まだ同じエラーが出るようなら2のケースです。
1のケースの場合はエラーが消えるか、「Cが初期化されていません」というエラーが出ます。
    • good
    • 0

この質問では


C=A+B
となっていますがデリミタ-(;)がついていませんよ。
C=A+B;
これはプログラムでは大丈夫ですか?

この回答への補足

ごめんなさい。
書くのを間違えましたが、「;」は入っています。

補足日時:2002/03/22 15:15
    • good
    • 0

変数名を変えてみて下さい。


VC++がどうなのかは知りませんが、コンパイラによっては、
例えばCとC++とを区別するためにCという定数が予め定義
されていたりするような場合があります。

この回答への補足

実際には、Cという変数名は使っていません。
もしかしたら、別のところでエラーが出ているのかもしれません。
行番号が出ているのですが、
コメント行は省いて考えるのですか?
もう1度調べて、また補足します。

補足日時:2002/03/22 15:15
    • good
    • 0

C = A + B を C = A + B ;


として再度実行してみてください。
それでもだめなら
int A;
int B;
int C;
A = 1;
B = 1;
C = A + B ;
としてみてください。
それでもまだエラーが出ますか?

この回答への補足

それでもエラーが出ます。

補足日時:2002/03/22 14:16
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qファイル(A)を読み込んで文字列を変数に代入、変数で別ファイル(B)を検索・・・

お世話になっております。
まず、仕様から書かせて頂きたいと思います。
【ファイルA】
商品名 数量
-------------
AAA, 3
BBB, 5
CCC, 6
AAA,5
.
.
.
【ファイルB】
AAA,11111
BBB,12345
CCC,99999
.
.
.
【ファイルC】
商品コード 数量
------------------
11111 8
12345 5
99999 6

(1)ファイルAを読込み、アルファベット文字列を変数に代入
(2)変数でファイルBを検索 (ファイルAの最後まで検索)
(3)検索してみつかったら 数字文字列(商品コードとします)に変換
(4)商品コードと、数量の合計をファイルCに出力

fgets、strcmpなどを使って試してみたのですが、
うまく行かず、教えていただけますでしょうか?

Aベストアンサー

私なら
このデータ群を表せる構造体を定義してファイルAのデータを集計
ファイルBのデータから コードを挿入
出来上がった構造体の配列(またはリスト)から ファイルCを生成
といった手順で組みますけど ・・・

Qdoubleの変数にintとintの割り算の結果を代入するとき

以下のようにするとdには0.5ではなく0が代入されます。

int x = 1, y = 2;
double d = x / y;

これを回避するために以下のようにするのが一般的だと習いました。

//1.
double d = (double)(x) / y; // これでdには0.5が代入される

これを以下のようにしてしまうのに問題はあるでしょうか?

//2.
double d = (double)(x) / (double)(y);
//3.
double d = x / (double)(y);

また、1.と2.と3.ではどれがより良いのでしょうか?
単純に好みの問題なのでしょうか?

以上、よろしくお願いいたします。

Aベストアンサー

恐れ入ります。

単純に好みの問題かと思います。
CやC++の規格に準拠したコンパイラであれば、結果的に同じ式として扱ってくれます。
***
ただし、1,2,3ではない別種の方法を良く用いるので参考までに挙げておきます。

int x = 1;
int y = 2;
double dpoX = 0;
double dpoY = 0;
double d = 0;

dpoX = (double)x;
dpoY = (double)y;
d = dpoX / dpoY; /* 計算するときには、精度を揃えておく */

整数を使う場面では整数を使い、倍精度の計算をするときには倍精度で計算するのが良いかと。混ぜると混乱の元です。
(個人的には、ハナからdoubleで取り扱うべきかと思います)

速度的には前述の1,2,3と同様に、計測できるほどの速度低下にはなりません。
(可読性を犠牲にするのは、「除算は遅いから使いたくない」という様な時だけにする方が良いと思います)

ご参考になれば幸いです。

Qint *a = new int; エラー

下記をコンパイルすると、'int' 型は 'int *' 型に変換できない(関数 main() )
とエラーが出てしまいました。 何がおかしいのでしょうか ?
初歩的な間違いをしていると思いますが、アドバイスお願いします。

#include<iostream>
#include<stdlib>
#include<ctime>
using namespace std;

void main(void)
{
int *a = new int;
a=rand();
cout<<a<<endl;
delete a;

}

Aベストアンサー

#include<iostream>
#include<cstdlib>
#include<ctime>
using namespace std;

int main(void)
{
srand ( time(NULL));
int *a = new int;
*a=rand();
cout<<*a<<endl;
delete a;
return 0;
}

/*
多分こうだと思う。
想像以上に乱数の精度が悪いような気がする。
*/

Q2 ~ 200 の素数 a, b, c (a < b < c) が、b - a = c - b を満たすa,b,cをビット操作を用いて求め、すべてを表示せよ

ちょっと考えてみました。でも、分かりません・・・まず、int型のintvalに200bitを割り当てて、intval=0としたいのですが、どうしたらいいのでしょう??
とりあえず考えてみたプログラムを誰か見て下さい!!お願いします。
#define BYTESIZE 200
#define MAX 200
main()
{
int i,j,intval=0;
for(i=2;i<=MAX/2;i++)
{
if(intval&(1<<(i-1)){}
else for(j=i*2;j<=MAX;j+=i)intval|=(1<<(j-1));
}/*素数を0、それ以外を1に
for(i=2;i<=MAX/2;i++)
for(j=2;j<=(MAX-i)/2;j++)
if((intval&(1<<(i-1))&&(intval&(i+j-1))&&(intval&(1<<(i+2*j-1)))) print("%3d %3d %3d (%3d)\n",i,i+j,i+2*j,j);
}/*三つ子の素数を調べ出力

ちょっと考えてみました。でも、分かりません・・・まず、int型のintvalに200bitを割り当てて、intval=0としたいのですが、どうしたらいいのでしょう??
とりあえず考えてみたプログラムを誰か見て下さい!!お願いします。
#define BYTESIZE 200
#define MAX 200
main()
{
int i,j,intval=0;
for(i=2;i<=MAX/2;i++)
{
if(intval&(1<<(i-1)){}
else for(j=i*2;j<=MAX;j+=i)intval|=(1<<(j-1));
}/*素数を0、それ以外を1に
for(i=2;i<=MAX/2;i++)
for(j=2;j<=(MAX-i)/2;j++)
if((intval&...続きを読む

Aベストアンサー

まずint型は200ビットもありません。通常は32ビットです。
200ビット使いたければint型を7個用意する必要があります。
つまり
int intval[7];
宣言して、
intval[0] 0~31ビット
intval[1] 32~63ビット
intval[2] 64~95ビット
.
.
.
intval[6] 182~200ビット
として使います。

第iビットの情報を取り出すときは
(intval[i>>5]>>(i&31))&1

第iビットを1にするときは
intval[i>>5]|=1<<(i&31);

とすれば良いでしょう。
関数やマクロを用意することをお勧めします。
例えば
int get(int intval[],int i)
{
return (intval[i>>5]>>(i&31))&1;/*0か1が返って来る。*/
}

void on(int intval[],int i)
{
intval[i>>5]|=1<<(i&31);
}

という感じです。

まずint型は200ビットもありません。通常は32ビットです。
200ビット使いたければint型を7個用意する必要があります。
つまり
int intval[7];
宣言して、
intval[0] 0~31ビット
intval[1] 32~63ビット
intval[2] 64~95ビット
.
.
.
intval[6] 182~200ビット
として使います。

第iビットの情報を取り出すときは
(intval[i>>5]>>(i&31))&1

...続きを読む

Qvoid (*signal(int signum, void (*handler)(int)))(int);

の解釈を教えてください
最後の「(int)」については詳しくお願いします

Aベストアンサー

signalが

(1)1つ目の引数の型:int
(2)2つ目の引数の型:引数がintで戻り値がvoidである関数へのポインタ
(3)戻り値の型:引数がintで戻り値がvoidである関数へのポインタ(2と同じ)

を満たす関数である事を宣言しています。最後の(int)はsignalの戻り値の
関数ポインタがint型の引数を持つ事を示しています。

「引数がintで戻り値がvoidである関数へのポインタ」の型をHANDLERと表すと

HANDLER signal(int signum, HANDLER handler);

となります。


人気Q&Aランキング

おすすめ情報