scanf
функция, как она используется в вашей программе не является безопасным и не позволяет рассчитывать пробелы.
Примечание. Примите во внимание, что вместо
scanf("%s",&str);
^^^
это будет правильно писать
scanf("%s",str);
^^^
И в соответствии с функциональной магистралью C Стандарт без параметров должен быть объявлен как
int main(void)
Лучше использовать функцию fgetc
Например
#include <stdio.h>
int main(void)
{
unsigned int space = 0;
unsigned int tabs = 0;
unsigned int newLine = 0;
printf("Enter the text: ");
int c;
while ((c = fgetc(stdin)) != EOF)
{
switch (c)
{
case ' ':
++space;
break;
case '\t':
++tabs;
break;
case '\n':
++newLine;
break;
}
}
printf("\nspace: %u\ntabs: %u\nnew line: %u\n", space, tabs, newLine);
return 0;
}
Если ввести текст, как этот
Hi, Marco Roberts
Welcome to SO
то вывод программы будет выглядеть
space: 4
tabs: 0
new line: 2
Используйте Ctrl + Z или Ctrl + d (в зависимости на используемой системе) для прерывания ввода.
Другой подход может выглядеть следующим образом
#include <stdio.h>
#define N 100
int main(void)
{
unsigned int space = 0;
unsigned int tabs = 0;
unsigned int newLine = 0;
printf("Enter the text: ");
char str[N];
while (fgets(str, sizeof(str), stdin))
{
for (const char *p = str; *p; ++p)
{
switch (*p)
{
case ' ':
++space;
break;
case '\t':
++tabs;
break;
case '\n':
++newLine;
break;
}
}
}
printf("\nspace: %u\ntabs: %u\nnew line: %u\n", space, tabs, newLine);
return 0;
}
Что делать, если я хочу получить информацию от консоли вместо файла? @xing –
Могу ли я использовать getchar(). Если да, то как?потому что я пробовал это, но он не дает правильного вывода –
спасибо, что он помог @ xing –