输入'/';退出C语言中的程序

输入'/';退出C语言中的程序,c,input,exit,C,Input,Exit,我被困在一个练习中。每当我在输入中输入斜杠(/),循环就不会结束 是否可以检查输入数据类型?因此,如果是数字,则执行show()。当它是字符('/')时,退出 #include <stdio.h> #include <stdlib.h> void show(int); int main(){ int quit = 0; printf("Enter a number to display: \n* times the input number\n");

我被困在一个练习中。每当我在输入中输入斜杠(
/
),循环就不会结束

是否可以检查输入数据类型?因此,如果是数字,则执行
show()
。当它是
字符('/')
时,退出

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

void show(int);

int main(){
    int quit = 0;

    printf("Enter a number to display: \n* times the input number\n");
    printf("Enter '/' to exit.\n");
    printf("======================\n\n");

    while(!quit) {
        printf("Input: ");
        int input;
        scanf("%d", &input);
        if (input == '/')
            quit = 1; // Suppose to exit when input = '/'
        else 
            show(input);

        printf("\n\n");
    }
}

void show(int n) {
    for (int i=1; i<=n; i++)
        printf("*");
}
#包括
#包括
无效显示(int);
int main(){
int-quit=0;
printf(“输入要显示的数字:\n*乘以输入数字\n”);
printf(“输入“/”退出。\n”);
printf(“========================================\n\n”);
而(!退出){
printf(“输入:”);
int输入;
scanf(“%d”,输入(&I));
如果(输入=“/”)
quit=1;//假设在输入为“/”时退出
其他的
显示(输入);
printf(“\n\n”);
}
}
无效显示(整数n){

对于(int i=1;i如果您想与
'/'
进行比较,您应该使用
char
变量,而不是
int
。因此使用
%c
作为
scanf()
的格式字符串。否则,
scanf()
将不会读取
'//code>,因为它不是整数

此代码段将具有您期望的行为:

while (!quit) {
    char input;
    scanf("%c", &input);
    if (input == '/')
        quit = 1;

如果读取一个数字,则可以将
0
48
'0'
)的ASCII值减去
char
,从而得到其
int
等效值:

show(input - '0');
show(input - 48);

如果要与
'/'
进行比较,应该使用
char
变量,而不是
int
。因此使用
%c
作为
scanf()
的格式字符串。否则,
scanf()
将不会读取
'/'
,因为它不是整数

此代码段将具有您期望的行为:

while (!quit) {
    char input;
    scanf("%c", &input);
    if (input == '/')
        quit = 1;

如果读取一个数字,则可以将
0
48
'0'
)的ASCII值减去
char
,从而得到其
int
等效值:

show(input - '0');
show(input - 48);

%d
scanf
中需要一个
int
数据类型。当您输入
'/'
时,它跳过
'/'
并查找
int
数据类型。它没有找到任何内容,而这个
'\
被保留在缓冲区中。在下一次迭代中,它会找到相同的
字符
类型,然后再次跳过这个字符和这个字符s循环继续导致无限循环。

%d
scanf
中需要一个
int
数据类型。当您输入
'/'
时,它跳过
'/'
并查找
int
数据类型。它没有找到任何内容,而这个
'\/code>将保留在缓冲区中。在下一次迭代中,它会找到相同的
字符
键入并再次跳过此字符,此循环将继续导致无限循环。

对于单个字符应使用
%c
,对于字符串应使用
%s
%d
正在查找数字。

对于单个字符应使用
%c
,对于字符串应使用
%s
%d
正在查找数字注。

关于while循环中的输入类型,您有一个错误:

int input;
scanf("%d", &input);
在这里输入“/”会在请求int时导致未定义的行为

相反,您必须让输入为字符串(键入
char*
),手动或通过
strncmp(input,“/”,1)
,检查字符串是否等于(“/”),检查它是否表示整数,然后使用
strtol(input,NULL,10)创建另一个int值
在输入有效且不等于“/”时转换为int


可能会涉及错误检查(不幸的是),例如处理外来字符,以及验证您的数字是否为regex-?(\d)(数字字符串前的单个可选减号)。

您在while循环中的输入类型有错误:

int input;
scanf("%d", &input);
在这里输入“/”会在请求int时导致未定义的行为

相反,您必须让输入为字符串(键入
char*
),手动或通过
strncmp(input,“/”,1)
,检查字符串是否等于(“/”),检查它是否表示整数,然后使用
strtol(input,NULL,10)创建另一个int值
在输入有效且不等于“/”时转换为int


可能会涉及错误检查(不幸的是),例如处理外来字符,以及验证您的数字是否为regex-?(\d)(数字字符串前的单个可选减号).

使用字符格式说明符not int。您希望从
%d
scanf中得到什么?它用于数值,在这种情况下
/
是无效字符。使用
%c
。使用字符格式说明符not int。您希望从
%d
scanf中得到什么?它用于数值,而
/
在这种情况下是无效字符。请使用
%c
.Thanks!但这仅在输入介于0-9之间时有效。是。如果要输入多个字符,则需要读取字符串。请参阅@MulliganaceousThanks!的答案,但这仅在输入介于0-9之间时有效。是。如果要输入多个字符,则需要读取字符串。请参阅@MulliganaceousThank y的答案ou的提示!现在我可以用“/”退出,但是show()坏了。如何将我的char*输入转换为int以便show()工作?我使用了atoi(n)-将数组字符串转换为int并退出循环!非常感谢!感谢提示!现在我可以用“/”退出,但是show()坏了。如何将char*输入转换为int以便show()工作行吗?我使用了atoi(n)-将数组字符串转换为int并退出循环!非常感谢!