我需要逐行读取标准输入的输入
但每行包含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;
}
答案 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;
}