Параметры букв в меню указаны как необъявленные в программе на Си - PullRequest
0 голосов
/ 25 августа 2011

Я думаю, что моя проблема проста, но я ее не вижу. Я новичок в программировании на C, и это попытка увидеть, что я поняла, понемногу. Я думаю, что я не правильно определил свою переменную char "dopt". Надеюсь, вы можете помочь. Вот код:

#include <stdio.h>


int dbref();
int aart();
int wgame();
int calc();
int txtoc();

int amin()

{
char dopt;
printf("What should this program have the options of doing?\n");
printf("A) Reference a database?\n");
printf("B) Print ascii art?\n");
printf("C) Make a noun, pronoun, object, verb word game?\n");
printf("D) Being a calculator?\n");
printf("E) creating a text file and save it as a .c file?\n");
printf("F) or should it just terminate?\n");
scanf("%c", &dopt);
if (dopt == a || A)
    { dbref();}
if (dopt== b || B)
     { aart();}
if ( dopt==c || C)
    { wgame();}
if ( dopt==d || D)
     { calc();}
if ( dopt==e || E)
    { txtoc();}
if (  dopt==f || F)
    { return 0;}
return 1;
}

dbref()
{
printf("reference A correct");
return 2;
}

aart()
{
printf("reference B correct");
return 3;

}

wgame()
{
printf("reference C correct");
return 4;

}

calc()
{
printf("reference D correct");
return 5;

}

txtoc()
{
printf("reference E correct");
 return 6;

}

Как примечание, функции printf в функциях служат только для проверки правильности работы меню.

Ответы [ 4 ]

4 голосов
/ 25 августа 2011

Код такой:

if (dopt == a || A)

должен быть написан примерно так:

if (dopt == 'a' || dopt == 'A')

, потому что a будет именем переменной или функции (которая несуществует), и 'a' является символьным литералом .

В качестве альтернативы, вы можете рассмотреть switch блок:

switch (dopt)
{
case 'a':
case 'A':
    dbref();
    break;
case 'b':
case 'B':
    aart();
    break;
/* etc. */
default:
    fprintf(stderr, "Unrecognised option!\n");
    return 1;
}
0 голосов
/ 25 августа 2011

Вы хотите заключить в кавычки свои письма при проверке параметров, иначе они будут рассматриваться как переменные и не смогут скомпилироваться, поскольку их не существует.

0 голосов
/ 25 августа 2011

Запись dopt == a || A не работает в C. То, что вам нужно, это

dopt == 'a' || dopt == 'A'

В C вы должны заключать символьные литералы в ' (в противном случае они интерпретируются как переменные).Вы также не можете объединить логические или, но вам нужно вводить dopt == каждый раз.

0 голосов
/ 25 августа 2011

a не совпадает с 'a'

  • a является идентификатором
  • 'a' это символ

Вы хотите сопоставить это, если содержимое переменной char dopt является любым из символов. Поэтому вам нужно сравнить значения символов ASCII, которые можно найти, поместив символ в одинарные кавычки.

Следовательно

if (dopt == a || A)
   { dbref();}

a и A обрабатываются как две отдельные переменные (имена), которые не объявляются (по крайней мере локально).

Так должно быть

if (dopt == 'a' || 'A')
    { dbref();}

Здесь 'a' и 'A' - символьные константы, а не имена переменных.

НО 'a' || 'A' всегда равно 1, потому что || - логический оператор ИЛИ. Поэтому dopt всегда будет ложным (почти). Но если вы хотите создать такой эффект, что если dopt равно 'a' или 'A', то позвоните dbref (), тогда вам нужно сделать следующее:

if ((dopt == 'a') || (dopt == 'A'))
    { dbref();}

или также

if (toupper (dopt) == 'A') // similar with tolower ()
    { dbref();}
...