while(1) {
printf("1. ADD\n2. VIEW LIST\n3. QUIT\n");
int menu = 0 ;
menu = getchar()-48;
getchar();
switch(menu) {
case 1:
addition(book,count++); break;
case 2:
viewList(book); break;
case 3:
return 0;
}
}
我只是尝试做我的练习代码。但是,我对这个C代码有疑问。
我认为
getchar();
menu = (getchar()-48);
是对的。但是,我写的是这样的。我的代码运作不好。然后重复打印出三个菜单。你能解释一下吗?我所知道的是getchar可以获得Character类型所以,我应该从getchar值抽象48(遵循ASCII CODE TABLE)。
我只是想知道它为什么不能很好地运作。
getchar();
menu = (getchar()-48);
答案 0 :(得分:2)
当您使用程序时,按下选择键 1 , 2 或 3 ,然后按 Enter 大骨节病>。这会将两个字符放入输入缓冲区。
getchar
的第一次调用会删除数字字符。您减去48
,这是您系统上'0'
的代码;在其他系统上它可能无法正常工作。一种可移植的方法是让编译器使用'0'
的适当数字代码:
menu = getchar()-'0';
第二个getchar
调用用于从输入缓冲区中删除'\n'
。如果您切换两个电话,第一个getchar
将丢弃该数字,第二个getchar
将读取'\n'
。
答案 1 :(得分:0)
您想要的代码是
set.seed(12345)
library(nnet)
df$highest_purchase_freq <- apply(df[2:4], 1, which.is.max)-1
df
customer A B C highest_purchase_freq
1 1 2 3 4 2
2 2 4 6 5 1
3 3 4 2 4 2
4 4 4 2 4 2
5 5 4 4 4 2
6 6 2 2 2 2
7 7 4 4 4 1
无需减去48即可将菜单放入0到9的范围内。 单引号是字符常量。所以编译器将取代&#39; 1&#39; 到49(假设Ascii)。它更具可读性和便携性。