2015-08-25 3 views
-3
#include <stdio.h> 
#include <conio.h> 
#include <string.h> 

main() 
{ 
float gross=0,otp=0,ot=0,pay=0; 
int IC,hours=0; 
char name[50]; 
char category; 
char rep = 'y'; 


while(rep == 'y') 
{ 

printf("\n\n Name : "); 
gets(name); 
printf("\n NRIC : "); 
scanf ("%d",&IC); 
printf("\n Category : "); 
scanf ("%s",&category); 
printf("\n Total Hours : "); 
scanf("%d",&hours); 

if (category = 'A1') //Line 25 
{ 
if (hours < 44) 
{ 
    printf("\n INVALID INPUT\n"); 
} 
else if (hours >= 44 && hours <= 60) 
{ 
    gross= 44*5; 
    ot= (hours-44)*(1/2*5); 
    pay=gross+ot; 
    printf("\n   Syarikat Smart Store Hypermarket Sdn. Bhd. "); 
    printf("\n =============================================================="); //Line 39 
    printf("\n Name: %s", name); 
    printf("\n NRIC: %d", IC); 
    printf("\n Category: %s", category); 
    printf("\n Total Hours: %d", hours); 
    printf("\n Gross Pay: RM %.2f", gross); 
    printf("\n Overtime Pay: RM %.2f", ot); 
    printf("\n Net Pay: RM %.2f", pay); 
} 
else 
    { 
    printf("\n\n INPUT NOT VALID"); 

Я не вижу ошибок в коде, за исключением строки 25, в которой указано предупреждение о символах с несколькими символами, но программа работает до строки 39 и сбой. Любая идея, почему или есть какая-либо ошибка в моем коде, которая вызывает это?Сбой программы при компиляции и запуске в Dev C++

+0

Здравствуйте и добро пожаловать в stackoverflow. Чтобы помочь другим людям помочь вам, вы должны отправить сообщение [для создания минимального, полного и проверяемого примера] (http://stackoverflow.com/help/mcve). Без этого становится все труднее определить, в чем проблема, как это может быть в некоторых частях кода, который вы не показываете. – Erik

ответ

1

Есть, по крайней мере, две проблемы, одна из которых уже указана компилятором: «A1» - это не один символ, который вы бы заключили в одинарные кавычки ('). Вам нужны двойные кавычки.

Кроме того, и, вероятно, более важно: вы на самом деле не выполняет сравнение в строке 25, вы изменения значение category (= против ==), так это означает, что вы будете ввести это условие также, если ваш вход не имеет ничего общего с A1, и, таким образом, другие вещи могут быть неправильными или неподходящими для ввода этого if.

EDIT: если вы используете в самом деле C, то вы должны использовать разностную функцию, чтобы сравнить свои строки, как указано в this page указал в this thread

поэтому вам нужно добавить по крайней мере

#include <string.h> 

затем измените свой if примерно на

if (strncmp(category,"A1",2) == 0) //Line 25 

где я как что вы изменяете определение вашей переменной category, например. char[50] как у вас есть для name и что ваши категории всегда имеют только две буквы.

Мой компилятор в дополнение предупреждает

предупреждение: «символ * получает (символ *)» осуждается

так что вы, вероятно, следует также рассмотреть вопрос о переходе от этого.

+0

Привет, Эрик, спасибо за приветствие. Я попробовал «==» A1 », но опять же другая ошибка, согласно которой ISO C++ запрещает сравнение между указателем и целым числом. Извините, я новичок в языке C. Что говорит эта проблема? –

+0

@ DJRaj это будет очень сложно помочь, не видя соответствующую часть кода. В сообщении указывается, что вы сравниваете целочисленный номер с указателем '' '' '' ', т. Е. Переменную, содержащую адрес памяти. Особенно, если вы новичок в языке, вы должны быть уверены в том, что будете изучать основы, в противном случае ваш прогресс будет медленным, и люди на этом сайте вряд ли захотят помочь вам, если вы придете с очень основными вопросами, которые являются частью любого вводного курса на C++. – Erik

+0

Кстати, вы говорите, что вы новичок в 'C', но в названии вашего вопроса вы говорите' C++'. Убедитесь, что вы понимаете, на каком языке вы хотите работать, поскольку они очень разные (даже если технически C++ поддерживает большие части C, см., Например, [здесь] (https://en.wikipedia.org/wiki/Compatibility_of_C_and_C%2B% 2B)) – Erik

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