2013-06-16 12 views
0

Я пытаюсь скомпилировать небольшую банковскую программу на C в visual studio 2012 express. Он показывает мне эту ошибку «необъявленный идентификатор» для почти всех переменных, и эта слишком «синтаксическая ошибка: отсутствует»; перед «типом». Пожалуйста, скажите мне правильный синтаксис. Спасибо.необъявленный идентификатор в C

#include<stdio.h> 
#include<conio.h> 
int main() 
{ 
printf("Welcome to skybank\n"); 
int deposit,withdraw,kbalance; 
char option; 
printf("Press 1 to deposit cash\n"); 
printf("Press 2 to Withdraw Cash\n"); 
printf("Press 3 to Know Your Balance\n"); 
scanf_s("%c",option); 
int decash,wicash; 
switch(option) 
{ 
int balance; 
printf("Enter your current Balance\n"); 
scanf_s("%d",&balance); 
case 1: 
    printf("Enter the amount you want to deposit\n"); 
    scanf_s("%d",&decash); 
    printf("Thank You\n"); 
    printf("%d have been deposited in your account\n",decash); 
    break; 
case 2: 
    printf("Enter the amount you want to withdraw\n"); 
    scanf_s("%d",&wicash); 
    int wibal; 
    wibal=balance-wicash; 
    printf("Thank You\n"); 
    printf("%d have been withdrawed from your account\n",wicash); 
    printf("Your balance is %d\n",wibal); 
    break; 
case 3: 
    printf("Your balance is Rs.%d\n",balance); 
    break; 
default: 
    printf("Invalid Input\n"); 
    break; 
} 
getchar(); 
} 
+0

в C, вы должны объявить переменные в начале родительского блока – gkovacs90

+0

Я все еще не могу запустить его. Спасибо за вашу помощь. –

+1

@ gkovacs90: Фактически, в текущем C (что означает C11 или даже C99) вы можете объявлять переменные в любой точке блока кода. Только в течение двух десятилетий C89 wihch - это все, что поддерживается MSVC, работающим как компилятор C, есть проблема. Ваш диагноз для части «необъявленных переменных» проблем с этим кодом является правильным в том, что компилятору MSVC требуются переменные, объявленные в начале блока. Ваш диагноз неверен в том, что современный C не налагает это ограничение; только компилятор MSVC все еще это делает. В коде есть другие проблемы. –

ответ

5

Компилятор Microsoft C поддерживает только 25-летнюю версию языка. И одно из ограничений заключается в том, что все переменные должны быть объявлены перед любыми другими операторами. Поэтому переместите все объявления переменных в начало функции.

Следующая ошибка, которую я вижу, это использование scanf_s с строкой формата %c. Вы должны передать указатель на переменную и передать количество символов для чтения.

scanf_s("%c", &option, 1); 

А также вам нужно передать адрес для чтения из balance.

Вам также необходимо изменить оператор switch, чтобы он просто содержал случаи. Переместите открытые инструкции снаружи.

Ваше сообщение option не будет работать. Потому что, когда вы проверяете 1, вы проверяете символ с кодом ASCII 1.Измените option на int и прочитайте с помощью %d.

Возможно, вы ищете что-то вроде этого:

#include<stdio.h> 
#include<conio.h> 

int main(void) 
{ 
    int deposit,withdraw,kbalance; 
    int option; 
    int decash,wicash; 
    int balance; 
    int wibal; 

    printf("Welcome to skybank\n"); 
    printf("Press 1 to deposit cash\n"); 
    printf("Press 2 to Withdraw Cash\n"); 
    printf("Press 3 to Know Your Balance\n"); 
    scanf_s("%d", &option); 
    printf("Enter your current Balance\n"); 
    scanf_s("%d", &balance); 
    switch(option) 
    { 
     case 1: 
      printf("Enter the amount you want to deposit\n"); 
      scanf_s("%d", &decash); 
      printf("Thank You\n"); 
      printf("%d have been deposited in your account\n", decash); 
      break; 
     case 2: 
      printf("Enter the amount you want to withdraw\n"); 
      scanf_s("%d", &wicash); 
      wibal=balance-wicash; 
      printf("Thank You\n"); 
      printf("%d have been withdrawed from your account\n", wicash); 
      printf("Your balance is %d\n", wibal); 
      break; 
     case 3: 
      printf("Your balance is Rs.%d\n", balance); 
      break; 
     default: 
      printf("Invalid Input\n"); 
      break; 
    } 
    getchar(); 
} 
+0

работал, но дает мне сообщение «invalid input» сразу после того, как я что-то делаю. –

+0

Нет, это нормально. Он работает отлично. Убедитесь, что вы вставляете последнюю версию. Мне пришлось исправить множество ошибок! –

+0

спасибо, что это сработало. гениальный сэр! Я помню, вы также помогли мне с моим калькулятором. –

1

сделать в начале блока в декларации переменной для визуального c.

E.g.

int main() 
{ 
    int deposit,withdraw,kbalance; 
    char option; 
    int decash,wicash 
    int balance; 
    int wibal; 
... 
+0

примечание: 'scanf_s («% c », & option, 1);' – BLUEPIXY

+0

спасибо за помощь, но это не сработало –

+0

@ user2481364 Что вы сомневаетесь, если он работает правильно? «Скажи мне правильный синтаксис». – BLUEPIXY

0

попробовать этот код:

#include<stdio.h> 
#include<stdlib.h> 
int main() 
{ 
    printf("Welcome to skybank\n"); 
    int deposit,withdraw,kbalance; 
    char option; 
    printf("Press 1 to deposit cash\n"); 
    printf("Press 2 to Withdraw Cash\n"); 
    printf("Press 3 to Know Your Balance\n"); 
    scanf("%c",&option); 
    int decash,wicash; 
    switch(option) 
    { 
    int balance; 
    printf("Enter your current Balance\n"); 
    scanf("%d",&balance); 
    case 1: 
     printf("Enter the amount you want to deposit\n"); 
     scanf("%d",&decash); 
     printf("Thank You\n"); 
     printf("%d have been deposited in your account\n",decash); 
     break; 
    case 2: 
     printf("Enter the amount you want to withdraw\n"); 
     scanf("%d",&wicash); 
     int wibal; 
     wibal=balance-wicash; 
     printf("Thank You\n"); 
     printf("%d have been withdrawed from your account\n",wicash); 
     printf("Your balance is %d\n",wibal); 
     break; 
    case 3: 
     printf("Your balance is Rs.%d\n",balance); 
     break; 
    default: 
     printf("Invalid Input\n"); 
     break; 
    } 
    getchar(); 
} 
1

Относно неустановленных переменного, попытайтесь поместить все объявления переменных в верхней части основного блока, что-то вроде:

int main() 
{ 
    int deposit, withdraw, kbalance, decash, wicash, wibal; 
    char option; 
    printf("Welcome to skybank\n"); 

Старых вариантов C хмурится смешением объявлений переменных с кодом. Насколько мне известно, стандарт C реализации Microsoft C - это pre-C99, поэтому, возможно, это может быть проблемой.

несколько других вопросов, которые вы должны искать в:

scanf_s("%c",option); - option должны быть &option как вы принимаете указатель на эту переменную.

Также здесь: case 1:

Вы хотите '1' (как в case '1') вместо простого 1, как это char, не int вы хотите.

То же самое для других case чеков.

Что касается проблем scanf_s, попробуйте выполнить компиляцию с предупреждениями, это должно было указываться компилятором.

Наконец, вы можете избавить свой код от переменных, которые вы не используете, таких как kbalance, withdraw и deposit.

+0

ОК спасибо, я попробую, чтобы он –

0

Переместить это:

int balance; 
printf("Enter your current Balance\n"); 
scanf_s("%d",&balance); 

Перед тем как switch заявление.

+0

Это часть проблемы; это не единственная проблема или даже самая серьезная проблема. –

Смежные вопросы