C中的函数Sleep使程序打印奇怪的字符

C中的函数Sleep使程序打印奇怪的字符,c,sleep,nested-loops,C,Sleep,Nested Loops,[编辑]我用C编写了一个程序,它应该通过不断打印和修改向量“riga_disigno”来打印垂直波 #include <stdio.h> #include <stdlib.h> #include <time.h> int main() { int riga_disegno[10], i = 0, j = 0, k = 0, length = 0; for(i = 0; i < 10; i++) /* Inizializza il ve

[编辑]我用C编写了一个程序,它应该通过不断打印和修改向量“riga_disigno”来打印垂直波

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main()
{
    int riga_disegno[10], i = 0, j = 0, k = 0, length = 0;

    for(i = 0; i < 10; i++) /* Inizializza il vettore */
    {
        riga_disegno[i] = 177;
    }

    printf("Quanti periodi dell'onda vuoi stampare?");
    scanf("%d", &length);

    for(k = 0; k < length; k++)
    {

        for(j = 0; j < 10; j++) /* Assegna ad un componente vettore il disegno dell'onda */
        {
            riga_disegno[j] = 254;

            for(i=0; i < 10; i++)
            {
                putchar(riga_disegno[i]); /* stampa il carattere [i] del vettore*/

            }
            printf("\n");

            riga_disegno[j] = 177; /* Riporta il componente al carattere di base */
        Sleep(100);
        }
        for(j = 9; j >= 0; j--) /* Assegna ad un componente vettore il disegno dell'onda */
        {
            riga_disegno[j] = 254;

            for(i=0; i < 10; i++)
            {
                putchar(riga_disegno[i]);
            }
            printf("\n");

            riga_disegno[j] = 177; /* Riporta il componente al carattere di base */
        Sleep(100);
        }
    }

        return 0;
}
#包括
#包括
#包括
int main()
{
int riga_disigno[10],i=0,j=0,k=0,length=0;
对于(i=0;i<10;i++)/**/
{
里加迪塞诺[i]=177;
}
printf(“定期定量数据统计”);
扫描频率(“%d”和长度);
对于(k=0;k=0;j--)/*由德隆达公司提供的组件*/
{
里加迪塞诺[j]=254;
对于(i=0;i<10;i++)
{
putchar(riga_Disigno[i]);
}
printf(“\n”);
里加·迪塞诺[j]=177;/*里波尔塔基地的组成部分*/
睡眠(100);
}
}
返回0;
}
我进入函数Sleep是因为程序的执行速度太快,但是现在,当我编译它时,它会在“wave”附近打印奇怪的字符。 非常感谢。
对不起,我的英语不好,我是意大利人。

当您修改
riga\u disegno
超出其边界时,您的代码会调用未定义的行为。您可以访问和修改
riga\u disegno[-1]
riga\u disegno[10]
。如前所述,未定义的行为意味着任何事情都可能发生,包括预期的行为

在您的特定情况下,您想知道当您通过添加函数调用
Sleep()
来修改代码时,为什么行为会发生变化。一种可能的解释是,当您修改源代码时,编译器会生成不同的代码,特别是当您调用外部函数时。超出数组边界修改内存的副作用可能不同,因为数组
riga_disigno
本身或其他局部变量
i
j
的分配可能不同。如果没有这些调用,副作用可能不会影响程序的输出,导致您错误地认为一切正常。通过这些调用,您可以看到这种未定义行为的一些副作用


这是一个很好的例子,说明了为什么人们应该总是避免未定义的行为。即使程序似乎运行正常,最轻微的修改也会带来灾难性的后果。

当您修改超出其边界的riga_Disigno时,您的代码会调用未定义的行为。您可以访问和修改
riga\u disegno[-1]
riga\u disegno[10]
。如前所述,未定义的行为意味着任何事情都可能发生,包括预期的行为

在您的特定情况下,您想知道当您通过添加函数调用
Sleep()
来修改代码时,为什么行为会发生变化。一种可能的解释是,当您修改源代码时,编译器会生成不同的代码,特别是当您调用外部函数时。超出数组边界修改内存的副作用可能不同,因为数组
riga_disigno
本身或其他局部变量
i
j
的分配可能不同。如果没有这些调用,副作用可能不会影响程序的输出,导致您错误地认为一切正常。通过这些调用,您可以看到这种未定义行为的一些副作用


这是一个很好的例子,说明了为什么人们应该总是避免未定义的行为。即使程序似乎运行正常,最轻微的修改也会带来灾难性的后果。

当您修改超出其边界的riga_Disigno时,您的代码会调用未定义的行为。您可以访问和修改
riga\u disegno[-1]
riga\u disegno[10]
。如前所述,未定义的行为意味着任何事情都可能发生,包括预期的行为

在您的特定情况下,您想知道当您通过添加函数调用
Sleep()
来修改代码时,为什么行为会发生变化。一种可能的解释是,当您修改源代码时,编译器会生成不同的代码,特别是当您调用外部函数时。超出数组边界修改内存的副作用可能不同,因为数组
riga_disigno
本身或其他局部变量
i
j
的分配可能不同。如果没有这些调用,副作用可能不会影响程序的输出,导致您错误地认为一切正常。通过这些调用,您可以看到这种未定义行为的一些副作用


这是一个很好的例子,说明了为什么人们应该总是避免未定义的行为。即使程序似乎运行正常,最轻微的修改也会带来灾难性的后果。

当您修改超出其边界的riga_Disigno时,您的代码会调用未定义的行为。您可以访问和修改
riga\u disegno[-1]
riga\u disegno[10]
。如前所述,未定义的行为意味着任何事情都可能发生,包括预期的行为

在您的特定情况下,您想知道当您通过添加函数调用
Sleep()
来修改代码时,为什么行为会发生变化。一种可能的解释是,当您修改源代码时,编译器会生成不同的代码,特别是当您调用外部函数时。修改数组边界以外的内存的副作用可能不同,因为数组本身或其他局部变量<