读取c中的1/2/5字符串输入

时间:2014-11-21 11:35:11

标签: c string input

我需要逐行读取标准输入的输入

但每行包含1或2或5个字符串,如:

bofob fbo
blabla bibi bobo fbo fbooo
bobobo bobo 
bobof

我该怎么做?

我的想法真的不是看起来很苛刻而且没有工作

char a[50],b[50],c[50],d[50],f[50];
int numOfStrings=0;
scanf(" %s",a);    char a[50],b[50],c[50],d[50],f[50];
int numOfStrings=0;
scanf(" %s",a);
if (scanf (" %s",b)){
   numOfStrings=2;
   if (scanf (" %s %d %d",c,d,f)
      numOfStrings=5;
    }
if (scanf (" %s",b)){
   numOfStrings=2;
   if (scanf (" %s %d %d",c,d,f)
      numOfStrings=5;
    }

但它无效,因为它会从下一行读取输入

有没有办法读取整行(我知道最多250个字符),然后知道那里有多少字?

编辑: 我将添加一个计数单词功能 但是什么是最好的wat ro读取一条线直到终点线或eof ??

int words(const char *sentence)
{
    int count,i,len;
    char lastC;
    len=strlen(sentence);
    if(len > 0)
    {
        lastC = sentence[0];
    }
    for(i=0; i<=len; i++)
    {
        if(sentence[i]==' ' && lastC != ' ')
        {
            count++;
        }
        lastC = int words(const char *sentence)
}


    return count;
}

3 个答案:

答案 0 :(得分:3)

您需要使用fgets()逐行输入 。查看手册页here。它还将使您免于处理空格分隔字符串的[1/2/5 / .....] number s的限制。提供足够的存储空间,您可以阅读1 to any个“字符串”。

注意:您可能需要自己处理尾随换行\n [由 ENTER 引起]。大多数时候都会引起麻烦。

答案 1 :(得分:2)

你可以扫描一行直到&#39; \ n&#39;使用%[^\n],然后将该行拆分为strtok()

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

const char s[2] = " ";
const int MAX_LINE_SIZE = 128;
FILE *fp; 
char *word, *str;
int word_counter;

/* Open the file here */    

while (fgets(str, MAX_LINE_SIZE, fp) != NULL) 
{
    word_counter = 0
    /* get the first word */
    word = strtok(str, s);

    /* walk through other words */
    while (word != NULL) 
    {
       printf(" %s\n", word);
       word_counter++; 

       word = strtok(NULL, s);
    }

    printf("This string contains %d words\n",word_counter);

} 

/* END of FILE */

答案 2 :(得分:1)

您可以使用fgets来读取文件,使用strchr来计算空格数:

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

int main(void)
{
    char s[250];
    char *p;
    FILE *f;
    int i;

    f = fopen("demo.txt", "r");
    while ((p = fgets(s, sizeof s, f))) {
        i = 0;
        while ((p = strchr(p, ' '))) {
            p++;
            i++;
        }
        printf("%d spaces\n", i);
    }
    fclose(f);
    return 0;
}