在 C 中输入 '/' 退出程序
Enter '/' to exit a program in C
我卡在练习中了。每当我在输入中输入斜杠 (/
) 时,循环都不会结束。
是否可以检查输入数据类型?所以如果它是数字,那么 show()
就会执行。当它是 character('/')
然后退出。
#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("*");
}
如果您想与 '/'
进行比较,您应该使用 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);
scanf
中的 %d
需要 int
数据类型。当您输入 '/'
时,它会跳过 '/'
并查找 int
数据类型。它什么也没找到,这个 '\'
留在缓冲区中。在下一次迭代中,它会找到相同的 char
类型并再次跳过此字符,此循环继续导致无限循环。
您应该对单个字符使用 %c
或对字符串使用 %s
,%d
寻找数字。
关于 while 循环内的输入类型错误:
int input;
scanf("%d", &input);
在此处输入“/”会导致 undefined 请求 int 时的行为!
相反,你必须让输入是一个字符串(类型char *
),检查字符串是否等于('/') 手动或通过 strncmp(input, "/", 1)
,检查它是否表示整数,然后创建 另一个 int 值 使用 strtol(input, NULL, 10)
转换为 int 如果您输入有效且不等于“/”。
可能会涉及错误检查(不幸的是),例如处理外来字符,以及验证您的号码是否采用正则表达式 -?(\d)(数字字符串前的单个可选减号)的形式。
我卡在练习中了。每当我在输入中输入斜杠 (/
) 时,循环都不会结束。
是否可以检查输入数据类型?所以如果它是数字,那么 show()
就会执行。当它是 character('/')
然后退出。
#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("*");
}
如果您想与 '/'
进行比较,您应该使用 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);
scanf
中的 %d
需要 int
数据类型。当您输入 '/'
时,它会跳过 '/'
并查找 int
数据类型。它什么也没找到,这个 '\'
留在缓冲区中。在下一次迭代中,它会找到相同的 char
类型并再次跳过此字符,此循环继续导致无限循环。
您应该对单个字符使用 %c
或对字符串使用 %s
,%d
寻找数字。
关于 while 循环内的输入类型错误:
int input;
scanf("%d", &input);
在此处输入“/”会导致 undefined 请求 int 时的行为!
相反,你必须让输入是一个字符串(类型char *
),检查字符串是否等于('/') 手动或通过 strncmp(input, "/", 1)
,检查它是否表示整数,然后创建 另一个 int 值 使用 strtol(input, NULL, 10)
转换为 int 如果您输入有效且不等于“/”。
可能会涉及错误检查(不幸的是),例如处理外来字符,以及验证您的号码是否采用正则表达式 -?(\d)(数字字符串前的单个可选减号)的形式。