-4

重複の可能性:
ansi c でパスカルから readln を置き換えるクールな関数はありますか?

どうすれば単語を行末まで読むことができるのかという問題に何度か遭遇しました。
例えば:
2
hello this is a word
hi five
so i want to output
case 1:
hello
this
is
word
case 2:
hi
five

4

3 に答える 3

1

\n文字列内の各文字をループし、または文字に遭遇したときにループできます\r。多分このような何か?:

char str[] = "Hello this is a word\nhi five";
int i;

for(i = 0; str[i] != '\0'; i++)
{
    if(str[i] != '\n' && str[i] != '\r') //do something with str[i]
    else //do something if a new line char is found
}

このようにして、新しい行が発生した場合に何をしたいかを正確に選択できます。私はファイルを解析するときにこの方法をよく使用します。各行をバッファーに書き込み、バッファーを処理してから、次の行を処理のためにバッファーに移動し始めます。

于 2012-08-25T18:18:27.757 に答える
-1

危険な機能の 1 つが、 という名前のソリューションを提供しますgets

さもないと:-

char line[512];
int count=0;
char input=1;
while((input=getchar())!='\n')
    line[count++]=input;
于 2012-08-25T18:11:55.363 に答える
-1
#include <stdio.h>

int main(){
    int i, dataSize=0;

    scanf("%d%*[\n]", &dataSize);
    for(i = 1; i<=dataSize;++i){
        char word[64];
        char *p=word, ch=0;
        printf("case %d:\n", i);
        while(EOF!=ch && '\n'!=ch){
            switch(ch=getchar()){
              case ' '://need multi space char skip ?
              case '\t':
              case '\n':
              case EOF:
                *p = '\0';
                printf("%s\n", p=word);
                break;
              default:
                *p++ = ch;
            }
        }
        if(ch == EOF)break;
    }

    return 0;
}

また

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

int main(){
    int i, dataSize=0;

    scanf("%d%*[\n]", &dataSize);
    for(i = 1; i<=dataSize;++i){
        char word[64],ch = 0;
        int stat = !EOF;
        printf("case %d:\n", i);
        while(EOF!=stat && '\n'!=ch){
            ch = 0;
            stat=scanf(" %s%c", word, &ch);
            if(EOF!=stat || isspace(ch)){
                printf("%s\n", word);
            }
        }
        if(EOF==stat)break;
    }

    return 0;
}
于 2012-08-26T09:15:15.290 に答える