我编写了这个程序来查找用户输入的一行文本的总位数。我在使用getchar()
时遇到错误。我似乎无法弄清楚我做错了什么?
#include <stdio.h>
#define MAX_SIZE 100
void main() {
char c[MAX_SIZE];
int digit, sum, i;
digit, i = 0;
printf("Enter a line of characters>");
c = getchar();
while (c[i] != '\n') {
digit = 0;
if (c [i] >= '0' && c[i] <= '9') {
digit++;
}
}
printf("%d\n", digit);
}
我将使用sum变量添加我找到的所有数字。但我在getchar()
行收到错误。 HELP ??
答案 0 :(得分:3)
您可以输入&#34;文字行&#34;不使用数组。
#include <stdio.h>
#include <ctype.h>
int main(void) { // notice this signature
int c, digits = 0, sum = 0;
while((c = getchar()) != '\n' && c != EOF) {
if(isdigit(c)) {
digits++;
sum += c - '0';
}
}
printf("%d digits with sum %d\n", digits, sum);
return 0;
}
请注意,c
的类型为int
。大多数库的字符函数都不使用char
类型。
编辑添加了数字的总和。
答案 1 :(得分:0)
Weather Vane的答案是最好最简单的答案。但是,为了将来参考,如果要迭代(循环)一个数组,使用for循环会更容易。此外,您的main函数应返回一个int,如下所示:int main()
。您需要在主函数的末尾添加return 0;
。这是程序的修改版本,它使用for循环遍历字符数组。我使用gets函数从控制台读取一行字符。它会等待用户输入字符串。
#include <stdio.h>
#define MAX_SIZE 100
int main()
{
char c[MAX_SIZE];
int digit = 0;
printf("Enter a line of characters>");
gets(c);
for (int i = 0; i < MAX_SIZE; i++)
{
if (c[i] == '\n') break; // this line checks to see if we have reached the end of the line. If so, exit the for loop (thats what the "break" statment does.)
//if (isdigit(c[i])) // uncomment this line and comment or delete the one below to use a much easier method to check if a character is a digit.
if (c [i]>= '0' && c[i] <= '9')
{
digit++;
}
}
printf("%d\n", digit);
return 0;
}
答案 2 :(得分:0)
获取整数中的位数很容易使用log.h()函数,该函数在math.h头文件中定义。考虑一下这个程序
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main (int argc, const char *argv[]) {
system("clear");
unsigned int i, sum = 0, numberOfDigits;
puts("Enter a number");
scanf("%u", &i);
numberOfDigits = (int) (log10(x) + 1);
system("clear");
while(i != 0) {
sum += (i % 10);
i /= 10;
}
fprintf(stdout, "The sum is %i\n", sum);
fflush(stdin);
return 0;
}