输入'/';退出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并退出循环!非常感谢!