2015-02-15 2 views
0
#include<stdio.h> 
#include<string.h> 
int main(int argc,char *argv[]) 
{ 
char c; 
char a[19][100]; 
int i=0; 
int j=0; 

while((c=fgetc(stdin))!=EOF) 
{ 
    if(c!=" ") 
    { 
    a[i][j]=c; 
    j++; 
    } 
    if(c==" "||c=='\n') 
{ 
    a[i][j]='\0'; 
    i++; 
    j=0; 
    } 
} 
for(j=0;j<i;j++) 
printf("%s \n",a[j]); 
} 

ошибкой я получаюошибки: Comparision между указателем и целым

15.c:12:5: warning: comparison between pointer and integer[enabled  by default] 

if(c!=" ") 
    ^

15.c:17:5: warning: comparison between pointer and integer [enabled by default] 

if(c==" "||c=='\n') 
+1

'» «' используется для строки (т.е., '' символ *). Используйте '' '' для 'char'. – haccks

+0

Вы не видите несоответствия между '' '' и '' \ n''? –

+0

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

ответ

2

c определен, чтобы быть char и " " является «строкой» буквальной, что в С implemtned как массив char s, который, в свою очередь, распадается на указатель на его первый элемент, то есть char *.

Чтобы устранить это сравнение, c - char.

if (c != ' ') /* Use ' to code a char literal, use " to code a string literal. "/ 

Кроме того, как вы назначите результат fgetc() к c и испытания c против EOF (который обычно является -1) делают c в int, то есть сделать его тип fgetc() возвращается.

-1

Вы сравниваете char с char *. Вы не можете этого сделать, и установите c как signed char, потому что он должен хранить EOF. Это зависит от компилятора char будет signed или unsigned, так что вы не можете знать. Это должно быть так:

if(c!= ' ') 
    { 
    a[i][j]=c; 
    j++; 
    } 
+0

Использование 'signed char' для' c' приведет к сбою программы при чтении '0xff'. – alk

+0

Я пишу текст, и теперь, если пользователь OP прочитает его, пользователь пойдет посмотреть, что подписано и что без знака, и какова область действия для обоих. Я думаю, что он/она нуждается в char для значений печати в области <127 (обычные символы, такие как a, b, c ...), и в этом случае c может быть подписан char. – RadijatoR

+0

Использование 'signed char' будет работать для 255 из 256 возможных символов. Он не работает для символа со значением '0xff'. Используя 'int', он будет работать для ** всех ** символов, которые являются 256 из 256. – alk

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