2015-12-13 4 views
0

У меня есть проблема, чтобы сравнить символ и «некоторый текст» внутри статьи if. Существует код:Char и если stament in C

#include<stdio.h> 
#include<stdlib.h> 
#include<string.h> 
int main() 
{ 
    char *start[99]; 
    printf("Welcome to MyOS 1"); 
    printf("\n" "#: "); 
    scanf("%[98]", &start); 
    if (&start == "help") 
    { 
     printf("All commands:" "File" "Calculator"); 
    } 
} 
+0

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

+1

, чтобы сравнить строки, вы должны использовать strcmp или сравнить char по char, см. Это http://stackoverflow.com/questions/8004237/how-do-i-properly-compare-strings-in-c –

+2

Вы действительно хотите массив char * указатели *, а не просто 'char start [99]'? –

ответ

2

start представляет собой массив указателей на символ, и вы, вероятно, хотите массив полукокса. Меняем

char *start[99]; 

в

char start[99]; 

и изменить scanf("%[98]", &start); к scanf("%[98]", start);

И сравнить с-строки, используйте strcmp(). Меняем

if (&start == "help") 

в

if (strcmp(start, "help") == 0) 

Если вы хотите прочитать линию, используйте fgets() вместо scanf().

Включение предупреждений компилятора также поможет. Для вашего кода, GCC вопросы:

предупреждение: формат '% [98' ожидает аргумент типа 'символ *', но аргумент 2 имеет тип 'символ * (*) [99] [-Wformat = ]

предупреждения: сравнение различных типов указателей не хватает литую

предупреждения: сравнения с строковыми литералами результатов в неустановленном поведения [-Waddress]

+0

Спасибо, что это работает. Как я вижу, я должен продолжать лучше учиться C. – Haxk20

+0

И у меня есть вопрос, как работает fgets() и какие параметры я должен использовать для него или это то же самое, что и scanf()? – Haxk20

+0

'fgets()' читает до тех пор, пока не ударит '\ n' или' EOF'. Например. use: 'char buf [256]; fgets (buf, sizeof buf, stdin); '. Обратите внимание, что 'fgets()' также будет читать '\ n', если в буфере есть место. Поэтому, если вы хотите обрезать новую строку, выполните: 'char * p = strchr (p, '\ n'); if (p) * p = 0; 'после вызова' fgets() '. –

0

есть несколько проблем с вашим кодом. Вероятно, вам нужен массив char, char start [99]. Вы должны использовать strcmp или strncmp для сравнения строк. Просто сделать работу с кодом можно сделать следующим образом:

#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 
#include <ctype.h> 

int main() 
{ 
    char start[99]; 
    printf("Welcome to MyOS 1"); 
    printf("\n" "#: "); 
    fgets(start, sizeof(start), stdin); 
    if (isalpha((unsigned char) *start) != 0) 
    { 
     if (strncmp(start, "help", 4) == 0) 
      printf("All commands: File Calculator\n"); 
     else 
      printf("No such command.\n"); 
    } 
    else 
     fprintf(stderr, "Error\n"); 
} 
+0

Спасибо, но я не понимаю что-то в этом коде, вы можете объяснить, как это работает? – Haxk20

+0

Что вы не понимаете? – mbass

+0

Если (isalpha ((неподписанный символ) * старт)! = 0) thats part – Haxk20