На консоль выводятся ненужные символы - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Помогите плз найти,что не так,хочу вывести строку b,в которую скопировал символы из s до 2 пробела. Выводит половину слова из s и дальше идут какие-то MMMMMMMMMMMMMMMMMMMMMMMMMMMM. Помогите,прошу
#include <stdio.h>
#include <string.h>
#include <conio.h>
#include <windows.h>
#include <string.h>
#include <locale>
int main()
{
setlocale(LC_CTYPE, "Russian");
char s[80];     //исходная строка
char a[80];     //слово
char b[80];     //временная строка
char *ps;       //указатель
char *ps1;      //указатель
int i;          //для s
int j;          //для a
int n;          //для b
int len;        //для подсчета длины строки
int len1;       //для подсчета длины слова
int k=0;        //для подсчета количества пробелов в строке
int k1=0;       //для подсчета количества пробелов перед словом
int probel=0;       //считает пробелы
int do2probela=0; //считает количество символов до 2 пробела
printf ("Введите строку:", s);
gets (s);
OemToCharA(s,s);
printf ("Ваша строка:%s", s);
len = strlen(s);
printf("\nДлина строки:%d",len);
printf ("\nВведите слово:", a);
gets (a);
OemToCharA(a,a);
printf ("Ваше слово:%s", a);
len1 = strlen(a);
printf("\nДлина слова:%d",len1);
j=0;
ps1=a;
i=0;
ps=s;
//стираем пробелы перед первым словом
while ((*ps!=0)&&(*ps==' '))                      
{                                               
ps++;                                           
k++;    //считаем количество пробелов перед первым словом                                       
}                                               
while (i<=(len-k))                                  
{                                               
    s[i]=*ps;   //записываем в s[i] отформатированную исходную строку
    i++;                                        
    ps++;                                       
}           
printf("\nОтчищенная от пробелов исходная строка:%s",s);
//стираем пробелы перед словом, которое хотим вставить
while ((*ps1!=0)&&(*ps1==' '))                    
{                                               
ps1++;                                          
k1++;   //считаем количество перед словом, которое хотим вставить                                       
}
while (j<=(len1-k1))                                    
{                                               
    a[j]=*ps1;   //записываем в a[i] отформатированное слово
    j++;                                        
    ps1++;  
}
printf("\nОтчищенное от пробелов слово:%s",a);
i=0;
while ((probel!=2)&&(i<=len-k))   //считаем количество символов до 2 пробела
            {
                do2probela++;
                i++;
                if (s[i]==' ')
                probel++;
            }
strncpy(b, s, sizeof(do2probela));   //копируем из строки s символы,которые находятся до 2 пробела во временную строку b
printf("\nВременная строка:%s",b);
getch();
}

Решение задачи: «На консоль выводятся ненужные символы»

textual
Листинг программы
#include <stdio.h>
#include <string.h>
 
#define C ' '
 
 
int main(int argc, char* argv[])
 
 
{   
    char s1[BUFSIZ], s2[BUFSIZ], *pch, t[BUFSIZ];
 
    gets (s1);
    fflush (stdin);
    gets (s2);
 
    pch = strchr ( s1 , C ) ;
    if ( pch )
        pch = strchr ( pch + 1 , C ) ;
 
    if ( pch )
    {
        strcpy ( t, pch + 1 ) ;
        strcpy (pch+1,s2);
        strcat (s1," ");
        strcat (s1,t);
    }
 
 
    printf (" Result : %s", s1);
 
    fflush (stdin);
    getchar ();
 
    return 0;
}

Объяснение кода листинга программы

  1. Включаются необходимые заголовочные файлы
  2. Определяется константа C, которая имеет значение пробела
  3. В функции main() объявляются три строки: s1, s2 и t. А также указатель pch
  4. В первую строку s1 считывается строка из стандартного ввода
  5. Во вторую строку s2 считывается строка из стандартного ввода
  6. Ищется первый символ пробела в строке s1. Если он найден, то в pch записывается адрес следующего символа после пробела
  7. Если первый пробел не найден, то в pch записывается 0 (нулевой указатель), что означает конец строки
  8. Если пробел был найден, то в pch ищется следующий пробел. Если он не найден, то в pch записывается 0
  9. Если в pch есть символ пробела, то в t копируется все, что идет после него в s1
  10. В s1 добавляется пробел, а затем в него добавляется содержимое t
  11. В s1 добавляется содержимое s2
  12. На консоль выводится результат: s1
  13. В стандартный ввод считывается символ, чтобы программа могла корректно завершить работу
  14. Программа возвращает 0, что означает успешное завершение работы

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

12   голосов , оценка 4.25 из 5
Похожие ответы