2013-08-01 3 views
-2

Мне нужно написать функцию, которая принимает 2 слова и подсчитывает их длину. Я написал ниже один, но этот код только для первого слова. Как я могу улучшить его для подсчета всего предложения?Ниже функция не работает по желанию

#include <stdio.h> 
int findlen(int *s); 

int main(void) 
{ 

    char string1[80]; 
    printf("Enter a string: "); 
    scanf("%s", string1); 

    printf("Lenght of %s is %d\n", string1, findlen(string1)); 

} 

//find the length of the inputted string 
int findlen(char *s) 
{ 

    int count = 0; 
    while (*s != '\0') 
    { 
    s++; 
    count++; 
    } 

    return count; 
} 
+1

Поскольку вы выполняете только один 'scanf()' с единственным аргументом '% s', вы получаете только одну строку. – mah

+4

Обычно избегайте использования 'scanf()'. Я еще не вижу веских оснований для его использования. 'fgets()' и иногда 'fgetc()' являются подходящими, и они ** действительно делают ** то, что вы думаете, что они делают. –

ответ

6

scanf будет принимать ввод одно слово только .. (то есть) он ломает, когда появляется пространство ..

Попробуйте fgets прочитать полную строку до \n

0

Вы можете использовать fgets для безопасного получить строку из файла:

From here:

char *fgets(char *s, int size, FILE *stream); 

так заменить Scanf линию:

fgets(string1, sizeof(string1), stdin); 

Если вы использовали gets вместо этого, он не знает, насколько велик ваш буфер и он будет падать при чтении слишком большой линии.

Далее, если вы хотите знать длину вашей строки, вы можете использовать strlen функцию от string.h:

#include<string.h> 
... 
printf("Lenght of %s is %d\n", string1, strlen(string1)); 
0

использование [^ \ п%] спецификатор формата, так что она будет сканировать строку до «\ n ', поэтому проблема в сканирующей строке, имеющей пространство (например, «hello word»), будет решена.

scanf("[%^\n]",straddr); 
Смежные вопросы