对于学校作业,我必须制作一个读取整数的C程序,其前面可能是' +'或' - '。我只能使用getchar()。
我可以使用int i = ch - '0'
将单个字符转换为int,但我想读取多个字符。除此之外,我需要检查输入是否正确(例如,没有非数字字符串)
到目前为止,我有这个:
int main(void) {
int i;
char ch;
printf("voer een getal in: ");
while ((ch = getchar()) != '\n') {
i = ch - '0';
}
printf("het ingevoerde getal is: %d\n", i);
return EXIT_SUCCES;
}
编辑:我知道这不是真正适合这样的问题的地方(我应该学会自己解决这个问题,而不是让其他人为我解决)但我不知道该怎么做了。谢谢你引导我走上正确的道路
答案 0 :(得分:2)
这应该让你开始:
int main(void) {
int i = 0;
int ch;
printf("voer een getal in: ");
while ((ch = getchar()) != '\n') {
if (ch > '9' || ch < '0')
continue; // or print an error and exit
i *= 10;
i += ch - '0';
}
printf("het ingevoerde getal is: %d\n", i);
return EXIT_SUCCES;
}
我会留下潜在的+
/ -
符号作为练习。
答案 1 :(得分:2)
如果您的学校允许您使用移位运算符,那么这里是从用户获取整数的快速方法,并且根据他们的要求,您可以在整数之前显示+或 - 符号。但请记住不要只是复制粘贴它。首先要理解代码。
int main(){
int i = 0;
char c;
char sign = 43;
printf("voer een getal in:\n");
c = getchar();
if(c == 45)
sign = 45;
for(; (c<48 || c>57); c = getchar());
for(; c>47 && c<58 ; c = getchar()){
i = (i<<1) + (i<<3) + c - 48;
}
printf("het ingevoerde getal is: %c%d\n",sign, i);
return 0;
}
答案 2 :(得分:0)
我认为这会奏效。
while ((ch = getchar()) != '\n') {
i = ch - '0' + i * 10;
代码中的问题是每次读取新字符时都会覆盖我。您需要存储您阅读的数字,然后添加到它。
答案 3 :(得分:0)
读取多个字符,并确定是正面,负面还是值:
int sign = 1;
ch = getchar(); //look at first char (might be a sign indicator)
if((ch == '-') || (ch == '+')) //consume first char if either `-` or `+`
{
if(ch == '-') sign = -1;
}
else //first char non-sign - handle as digit
{
if (ch > '9' || ch < '0')
continue; // or print an error and exit
i *= 10;
i += ch - '0';
}
while ((ch = getchar()) != '\n') //get remaining chars (assume no embedded sign chars)
{
if (ch > '9' || ch < '0')
continue; // or print an error and exit
i *= 10;
i += ch - '0';
}
i *= sign; //apply sign to value
答案 4 :(得分:0)
你应该注意不是数字字符:
while((ch=getchar()) != '\n')
if(ch >= '0' && ch <= '9')
i += 10* i + (ch - '0');
对于&#39; - &#39;或&#39; +&#39;在开始时你可以存储第一个getchar()。解决方案可能是:
#include <stdlib.h>
#include <stdio.h>
int main(void) {
int i = 0;
char ch,first_ch;
printf("voer een getal in: ");
ch = first_ch = getchar();
while (ch != '\n') {
if(ch >= '0' && ch <= '9')
i = 10* i + (ch - '0');
ch = getchar();
}
if(first_ch == '-')
i *= -1;
printf("het ingevoerde getal is: %d\n", i);
return EXIT_SUCCESS;
}