2015-03-17 2 views
0

Проблема заключается в том, что на выходе атрибуты sp, bp, temp, cold, fever и stomach назначаются значениями мусора, а также строки, введенные для symp [i], не сохраняются должным образом. Это еще не полная программа, у нее есть еще несколько дополнений.Значения мусора, назначаемые при использовании динамического ввода; на языке C

программа следующим образом .. файлы заголовков stdio.h и conio.h

#include<stdio.h> 
#include<conio.h> 
void main() 
{  
char * symp[10]; 
int n=0,i,sp,dp,cold,fever,stomach;  
float temp; 
clrscr(); 
printf("Enter your body temperature: ");  
scanf("%f",&temp);  
printf("Enter your systolic BP: ");  
scanf("%d",&sp);  
printf("Enter your diastolic BP: ");  
scanf("%d",&dp);  
printf("Enter the no of symptoms: ");  
scanf("%d",&n);  
printf("Enter the symptoms you have, one by one\n"); 
fever=cold=stomach=0;  
for(i=0;i<n;i++)  
{  
    scanf("%s",symp[i]);  
    printf("i=%d\tn=%d\n",i,n);  
    if(symp[i]=="cough")  
    { cold=cold+1;}  
    if(symp[i]=="sneezing")  
    { cold=cold+1;}  
    if(symp[i]=="running_nose")  
    { cold=cold+1;} 
    if(symp[i]=="headache")  
    { cold=cold+1;fever=fever+1;}  
    if(symp[i]=="chill")  
    { fever=fever+1; } 
    if(symp[i]=="weakness")  
    { fever=fever+1; } 
    if(symp[i]=="stomach_pain") 
    { stomach=stomach+1; } 
    if(symp[i]=="diarrhoea") 
    { stomach=stomach+1;}  
    if(symp[i]=="vomiting")  
    { stomach=stomach+1;fever=fever+1;} 
    if(symp[i]=="throat_pain") 
    { cold=cold+1;}  
    if(symp[i]=="body_pain") 
    { fever=fever+1;} 
} 
printf("Your temperature is: %f\n",temp); 
printf("Your BP is: %d/%d\n",sp,dp); 
printf("The symptoms are:\n"); 
for(i=0;i<n;i++) 
{ 
printf("%s\n",symp[i]); 
} 
printf("cold: %d\nfever: %d\nstomach: %d",cold,fever,stomach); 
getch(); 
} 
+3

Просьба отложить и удалить пустые строки. Никто не любит прокрутки. –

+2

Вы должны проверить возвращаемое значение 'scanf()', вы не можете жаловаться на ** значения мусора **, потому что ваш код небезопасен, поскольку он не имеет проверки ошибок. –

+1

В некоторых ваших условиях 'if' отсутствуют фигурные скобки' {} '. – user694733

ответ

3

Вы не можете сравнить char[] для статических строк с ==, вы должны использовать strcmp или strncmp, что-то вроде:

if (strcmp(symp[i], "headache")) 

вы также должны пройти адрес к scanf("%s", ...), что-то вроде:

scanf("%s", &symp[i]); 
3

Вы scanf() ING в strnig и передавая char * к scanf() без инициализации его

scanf("%s", symp[i]); 

это неправильно.

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

char symp[100][10]; 

и тогда ваш scanf() будет выглядеть следующим образом

scanf("%99s", symp[i]); 
/* ^this prevents overflowing `symp[i]' */ 

Тогда, как другой answer by @PaulEvans упоминает, вам нужно использовать strcmp() для сравнения строк.

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