我尝试使用ASCII代码,将%d
替换为`scanf()代码中的%c
。但随后显示 - 添加= 5(如果我将输入5& 6与65 ASCII码放在一起)
#include <stdio.h>
#include <conio.h>
void main()
{
int num1,num2,res;
char ch;
printf("Enter two numbers");
scanf("%d%d",&num1,&num2);
printf("Enter the operator from the following\n\nA for +\nB for -\nC for*\nD for /\n");
scanf("%c",&ch);
if(ch=='A')
{
res=num1+num2;
printf("Add=%d",res);
}
else if(ch=='B')
{
res=num1-num2;
printf("Sub=%d",res);
}
else if(ch=='C')
{
res=num1*num2;
printf("Mul=%d",res);
}
else if(ch=='D')
{
res=num1/num2;
printf("Div=%d",res);
}
else
{
printf("Invalid Operator");
}
getch();
}
输出:
任何帮助?
答案 0 :(得分:1)
令人遗憾的是,你正面临着每个初级C程序员所面临的同样问题:scanf
很糟糕。当你打电话
scanf("%d%d",&num1,&num2);
它正确读取了您输入的两个数字。但是在输入两个数字后,你可能会点击RETURN。第一次调用scanf
不读取返回字符。所以它仍然位于输入缓冲区中,当您稍后调用scanf("%c",&ch)
时,它实际上是读取的换行符,而不是您想要读取的A或B. / p>
根本不更改您的程序,您可以尝试输入类似
的内容12 34A
响应第一个提示。第一个scanf
不会读取它,所以现在它将位于输入缓冲区中,等待您第二次调用scanf
来查找它。
这是一种解决方法,而不是解决方法。要修复它,你可以做@Ediac在他的回答中提出的建议。
(一个更好的解决办法可能根本就不是scanf
,但不幸的是,这涉及到了解I / O的情况,而不是你的书或教师可能最初想要进入的权利。)
答案 1 :(得分:0)
我宁愿写一个更有用和正确的代码版本
char** directory_string_array(char* directory, size_t *strcount){
...
//print the array to check it
for(i = 0; i < *strcount; i++){
printf("strarray[%d] == %s\n", i, string_array[i]);
}
return string_array;
}
void free_directory_string_array(char **string_array, size_t strcount) {
for(i = 0; i < strcount; i++){
free(string_array[i]);
}
free(string_array);
}
<强>输入强>
#include <stdio.h>
int main() {
int n1, n2, ans;
char op;
scanf("%d %c %d", &n1, &op, &n2);
switch (op) {
case '+':
ans = n1 + n2;
break;
case '-':
ans = n1 - n2;
break;
case '*':
ans = n1 * n2;
break;
case '/':
if (n2) {
ans = n1 / n2;
break;
}
default:
fprintf(stderr, "Invalid Input\n");
return 1;
}
printf("%d", ans);
return 0;
}
<强>输出强>
1 + 2
4-3
请参阅http://ideone.com/y2nnWF演示。