Turbo C-停止代码重新运行

Turbo C-停止代码重新运行,c,C,下面有一段代码,如果运行,scanf将请求一个char类型的值。正如您所看到的,代码没有for循环或do while,但是如果插入一个值,只要该值是char类型,代码就会重新运行。希望有人能帮忙:) #包括 main(){ 字符名; clrsc(); printf(“欢迎谁?\n->”); scanf(“%s”、&name); getche(); 返回0; } 您遇到了未定义的行为。未定义的行为意味着你正在做一些你不应该做的事情,而标准没有定义,这意味着编译器可以对你的程序做任何事情。这包括正确

下面有一段代码,如果运行,scanf将请求一个char类型的值。正如您所看到的,代码没有for循环或do while,但是如果插入一个值,只要该值是char类型,代码就会重新运行。希望有人能帮忙:)

#包括
main(){
字符名;
clrsc();
printf(“欢迎谁?\n->”);
scanf(“%s”、&name);
getche();
返回0;
}

您遇到了未定义的行为。未定义的行为意味着你正在做一些你不应该做的事情,而标准没有定义,这意味着编译器可以对你的程序做任何事情。这包括正确工作、永久循环、删除您喜爱的图片或w/e

查看变量的名称,您似乎想将完整的“名称”读入单个
char
变量,但它只有一个字母的内存

将其更改为:

#include <stdio.h>
main(){
    char name[51]; // make a char array that's large enough to hold the name
    clrscr();
    printf("welcome who?\n->");
    scanf("%50s",&name); // read a string of up to 50 characters.
    getche();
    return 0;
}
#包括
main(){
char name[51];//制作一个足够大的char数组来保存名称
clrsc();
printf(“欢迎谁?\n->”);
scanf(“%50s”,&name);//读取最多50个字符的字符串。
getche();
返回0;
}
请注意,我们需要比在字符串中读取的“\0”字符多1个空间,这意味着您的原始代码甚至无法读取单个字符


另外,作为一个一般性的个人建议,请不要使用Turbo C/C++,除非教授强迫您使用,否则它们已经完全过时了。

什么是“代码重新运行”?你到底看到了什么?只是重复而已。这就像我再次运行代码一样。这很重要!单个
char
只能包含一个字符。任何人都不应该是“Turbo C新手”,任何“新手”都不应该使用它。得到一个现代的编译器@Dmitry7715:你没有领会我的观点——Turbo C是一个16位MS-DOS编译器,上一次发布是在1988年。如果你是C语言新手,不要从一个过时操作系统的仿古编译器开始。编译器/IDE及其生成的应用程序甚至都不会在Win64上运行。有一些现代的免费工具链是更好的选择。这就是我所缺少的。C比我想象的要复杂得多。
#include <stdio.h>
main(){
    char name[51]; // make a char array that's large enough to hold the name
    clrscr();
    printf("welcome who?\n->");
    scanf("%50s",&name); // read a string of up to 50 characters.
    getche();
    return 0;
}