0 / 0 / 0
Регистрация: 08.03.2014
Сообщений: 12
1

\n не переводит новую строку после цикла while

30.12.2017, 14:24. Показов 1141. Ответов 12
Метки нет (Все метки)

Есть рабочая программа, которая проверяет условие не убывания цифр в числе. Для того, чтобы программа автоматически переводила курсор на новую строку после вывода результата добавил printf("\n") в конце программы после цикла while. Но она не переводит. Почему?
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
#include <stdio.h>
#include <math.h>
 
int main(void)  
{
    long long int  x;
    int l = 0;
    long long int z;
    long long int r;
    int i = 0;
    int m = 1;
    while (scanf("%lld", &x) == 1) { // НАЧАЛО ДАННОГО ЦИКЛА
       long long int k = 1;
        if (x < 0) {
            x *= -1;
        } else {
            x == x;
        }
        while (((long long int)(x / k)) >= 10) {  
            k *=10;
        }
        if (x > 9) {
             do {
            z = (long long int) x / k ; 
            z = z % 10;
            r = (long long int) x / (k /10) ; 
            r = r % 10;
            k /= 10;
             switch (m) {
            case 1: if(z < r) { 
                i = 1;
                m = 2;
 
            } else if(z == r) { 
                m = 3;
                i = 1;
            } else {
                    i = 0;
                    m = 0;
                    
            }
            break;
 
            case 2: if (z < r) {
                m = 2;
                
            } else  {
                i = 0;
                m = 0;
                
            }
            break;
 
            case 3: if (z == r) {
    
                m = 3;
            } else {
                i = 0;
                m = 0;
                
            }
            break;
 
            case 0:  break;
            }
            } while(k > 1);
            } else {
                i = 1;
            }
            m = 1;
            if (i == 1) {
                printf("true ");
                
            }   else {
                printf("false ");
                
            }
} // КОНЕЦ ДАННОГО ЦИКЛА
printf("\n");
  return 0;  
}
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.12.2017, 14:24
Ответы с готовыми решениями:

Не переводит на новую строку
Почему сишная функция не хочет переводить текст на новую строку(\n)? szCALL MACRO sz CALL @F...

Не переводит на новую строку!
#include &lt;stdio.h&gt; #include &lt;string.h&gt; int main() { char a,b; //Длинные числа int...

fprintf не переводит на новую строку
fprintf(fz,&quot;%7s|%7s|%7s|%7s|%7s|\n &quot;,Ndv1,Kd1,Mvx1,Nk1,Urash1,Nper1); не хочет переводить на новую...

Acstime переводит на новую строку
Добрый день. Хочу сделать void, который будет печатать цветной текст с временем. Но появилась такая...

12
1269 / 1026 / 470
Регистрация: 25.12.2016
Сообщений: 3,333
30.12.2017, 15:56 2
Цитата Сообщение от avesx Посмотреть сообщение
Но она не переводит.
Вообще нигде не переводит, или не переводит там, где вам нужно?
Если нужно переводить внутри цикла, то зачем вы написали эту строку снаружи (после) цикла?
0
3 / 3 / 2
Регистрация: 29.05.2015
Сообщений: 20
30.12.2017, 16:05 3
C
1
2
3
4
5
6
7
8
if (i == 1) 
{
      printf("true \n");
                
}   else {
      printf("false \n");
                
}
0
0 / 0 / 0
Регистрация: 08.03.2014
Сообщений: 12
30.12.2017, 16:09  [ТС] 4
Если я напишу printf("true \n") или printf("false \n"), которые внутри цикла, то при введении нескольких чисел через пробел, я получу каждый ответ на новой строке, а мне нужно, чтобы ответы ответы шли так же, как и числа через пробел, а только потом происходил перевод на новую строку. Именно поэтому поэтому пихнул перевод после цикла, но он не работает(
0
1269 / 1026 / 470
Регистрация: 25.12.2016
Сообщений: 3,333
30.12.2017, 16:26 5
avesx, попробуйте поменять местами 78 и 79 строку.
0
0 / 0 / 0
Регистрация: 08.03.2014
Сообщений: 12
30.12.2017, 16:30  [ТС] 6
Так тоже пробовал, но это тоже самое, что и printf("true \n") или printf("false \n"). Я не пойму, почему после выхода из цикла, программа переходит сразу в return, игнорируя printf("\n");
0
3 / 3 / 2
Регистрация: 29.05.2015
Сообщений: 20
30.12.2017, 16:38 7
да не игнорирует она printf("\n") , он как положено срабатывает, но именно при выходе из цикла, т.е. непосредственно перед завершением программы

замени на printf("test\n") и увидишь в чём твоя ошибка
0
0 / 0 / 0
Регистрация: 08.03.2014
Сообщений: 12
30.12.2017, 16:48  [ТС] 8
Мне и нужно, чтобы срабатывало после цикла. Вот он счел значения, вывел ответ(или ответы через пробел), вышел из цикла и сразу перевел на новую строку. Но не срабатывает он.. Даже если заменить на printf("test\n"), то слова test не видно. Я вот этого не пойму
0
1269 / 1026 / 470
Регистрация: 25.12.2016
Сообщений: 3,333
30.12.2017, 17:07 9
avesx, проблема в том, что функция scanf не делает различия между двумя ситуациями: 1) все числа находятся в одной строке; 2) каждое число находится в отдельной строке (после ввода каждого числа нажимается Enter). Она просто считывает по одному числу из входного потока, независимо от того чем это число заканчивается: пробелом или символом '\n'.

Поэтому сначала вам придётся разобраться с тем, как научить scanf различать эти две ситуации.
0
3 / 3 / 2
Регистрация: 29.05.2015
Сообщений: 20
30.12.2017, 18:51 10
Мне и нужно, чтобы срабатывало после цикла.
ты просто не понял в какой момент прекращается цикл, введи любую букву и нажми enter

while (scanf("%lld", &x) == 1) // пока соблюдается это условие, выход из цикла не произойдёт, а соблюдаться оно будет до тех пор, пока ты не введёшь что нибудь отличающееся от цифр
0
0 / 0 / 0
Регистрация: 08.03.2014
Сообщений: 12
30.12.2017, 19:43  [ТС] 11
megavolt85, все, теперь понял. Спасибо))
0
3 / 3 / 2
Регистрация: 29.05.2015
Сообщений: 20
30.12.2017, 21:27 12
avesx попробуй так

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#ifndef __linux
#include <conio.h>
#else
#include <unistd.h>
#include <termios.h>
 
typedef unsigned char u8; 
typedef unsigned short u16; 
typedef unsigned int u32; 
typedef unsigned long long u64;
typedef char s8;
typedef short s16; 
typedef int s32; 
typedef long long s64;
 
#define MAX_INPUT_PARAMS 10
#define MAX_VAL_LEN 20
 
s32 getche()
{
    s32 ch;
    struct termios oldt, newt;
    tcgetattr( STDIN_FILENO, &oldt );
    newt = oldt;
    newt.c_lflag &= ~( ICANON | ECHO );
    tcsetattr( STDIN_FILENO, TCSANOW, &newt );
    ch = getchar();
    tcsetattr( STDIN_FILENO, TCSANOW, &oldt );
    printf("%c", (s8) ch);
    return ch;
}
#endif
 
s32 get_nums(u8 buff[MAX_INPUT_PARAMS][MAX_VAL_LEN], u8 dcnt[MAX_INPUT_PARAMS], u8 *pcnt)
{
    s32 i = 0, ch, n = 0;
    s8 str[MAX_INPUT_PARAMS][MAX_VAL_LEN+1];
    
    *pcnt = 0;
    memset(dcnt, 0, MAX_INPUT_PARAMS * sizeof(u8));
    memset(buff, 0xff, MAX_INPUT_PARAMS*MAX_VAL_LEN);
    
    while ((ch = getche()) != '\n')
    {
        if (i == MAX_VAL_LEN || ch == 0x20)
        {
            str[n][i] = '\0';
            i = 0;
            
            if (++n >= MAX_INPUT_PARAMS)
            {
                break;
            }
        }
        
        if (ch == 8 || ch == 127)
        {
            if (--i < 0)
            {
                if (n > 0)
                {
                    i = strlen(str[--n]) - 1;
                }
                else
                {
                    i = 0;
                }
            }
            
            printf("\b \b");
            continue;
        }
        
        if (!isdigit(ch))
        {
            if (ch == ' ')
            {
                continue;
            }
            
            printf("\b \b");
        }
        
        str[n][i++] = (s8) ch;
    }
    
    str[n][i] = '\0';
    
    if (!i && !n)
    {
        return -1;
    }
    
    for (s32 k = 0; k <= n; k++)
    {
        i = 0;
        
        while (str[k][i] || i < MAX_VAL_LEN)
        {
            buff[k][i] = str[k][i] - '0';
            dcnt[k]++;
            ++i;
        }
        *pcnt += 1;
    }
    
    return 0;
}
 
s32 main(void)  
{
    u8 digit[MAX_INPUT_PARAMS][MAX_VAL_LEN];
    u8 digit_cnt[MAX_INPUT_PARAMS];
    u8 param_cnt;
    u8 state;
    
    s32 i;
    
    while (!get_nums(digit, digit_cnt, &param_cnt))
    {
        for (i = 0; i < param_cnt; i++)
        {
            state = 0;
            
            for (s32 n = 1; n < MAX_VAL_LEN; n++)
            {
                if (digit[i][n] > 9)
                {
                    break;
                }
                
                if (digit[i][n] >= digit[i][n-1])
                {
                    state = 1;
                    break;
                }
            }
            
            printf("%s ", !state ? "true " : "false ");
        }
        printf("\n");
    }
    
    return 0;  
}
0
Модератор
Эксперт функциональных языков программированияЭксперт Python
33160 / 18491 / 3895
Регистрация: 12.02.2012
Сообщений: 31,059
Записей в блоге: 12
30.12.2017, 21:29 13
Цитата Сообщение от avesx Посмотреть сообщение
Есть рабочая программа
- это пример т.н. говнокода. Копаться в нем не хочется. Стыдно так программировать... Смотри:

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#include <stdio.h>
#include <stdlib.h>
void check(int *A, int n)
{
     int k,rc,rp,i,f;
     for (i=0; i<n; i++)
     {
         k=A[i];
         rp=k%10;
         k=k/10;
         f=0;
         while (k>0)
         {
            rc=k%10;
            if (rc >= rp)    
            {
               f=-1;
               break;
            }
            k=k/10;
            rp=rc;
         }       
         printf("%d ",A[i]);
         if (f)
            printf("->False ");
         else
            printf("->True ");      
     }
}     
int main(int argc, char *argv[])
{
  int Z[]={123,567,849,912,1043};
  check(Z,sizeof(Z)/sizeof(int));
  printf("\n");
  system("PAUSE");  
  return 0;
}
А вот выдача:

123 ->True 567 ->True 849 ->False 912 ->False 1043 ->False
Для продолжения нажмите любую клавишу . . .

Естественно, printf "переводит строку" там, где надо...
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
30.12.2017, 21:29
Помогаю со студенческими работами здесь

Функция переводит на новую строку
Наткнулся на функцию, которая отправляет сообщение пользователю с определенным именем (для чата на...

ENTER переводит на новую строку только при двойном нажатии в консоле
ENTER переводит на новую строку только при двойном нажатии в консоле, но это если написать такой...

Копировать строку из цикла в новую книгу
Добрый день, уважаемые коллеги :senor: Не подскажите в чем проблема? Пытаюсь скопировать из...

Как при определённой итерации цикла создать новую строку в таблице HTML?
будет смесь php и html, по-другому не знаю как описать проблему. Есть много папок, программа...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru