我需要输出句子内部数字的总和。 例如:
我需要阅读所有句子包含空格来执行此操作,但我的int main() {
int i = 0;
int somma = 0;
char s[MAX];
printf("inserisci la stringa : ");
scanf("%s",s);
while((s[i] = getchar()) != '\n'){
i++;
if(s[i]>'0' && s[i]<'9'){
somma+= (int)s[i]-(int)'0';
}
}
printf("la somma è = %d", somma);
}
循环不起作用。可以帮我找到问题吗?
getchar
我不必使用fgets
。我更愿意使用fgets
,因为我知道public class GroupMessages {
//TODO: Get the list of seen node;
private String message, from, type;
private long time;
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public long getTime() {
return time;
}
public void setTime(long time) {
this.time = time;
}
public String getFrom() {
return from;
}
public void setFrom(String from) {
this.from = from;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
}
可以读取包括空格在内的整行。
答案 0 :(得分:1)
由于您可以使用fgets()
,因此您可以阅读整行,然后使用isdigit()
查找数字。
FILE *fp;
fp = fopen("file.txt" , "r");
if(fp == NULL) {
perror("Error opening file");
return(-1);
}
char line[MAX];
if( fgets(line, MAX, fp) == NULL ) { // Read entire line
perror("Error reading file");
return -1;
}
int sum = 0;
int len = strlen(line);
for (int i = 0; i < len; i++) {
if (isdigit( (unsigned char)line[i] )) { // cast handles negative values of line[i]
sum += line[i] - '0'; // Add integer value to sum
}
}
基本思路是一样的,只有这样才能直接在字符串上循环,而不是试图在每一步都用getchar()
读取它。
答案 1 :(得分:0)
有两种方法可以解决您的问题。
要阅读整个字符串,您可以在使用scanf
时使用它。它将整个字符串存储在数组中(s
在你的情况下),然后你可以像你一样解析这个数组和执行操作。这里的限制是字符串的长度。您只能接受MAX
大小的字符串,因为您的数组大小很多。如果你对此没问题,那么你的代码是正确的。您只需从getChar()
删除while
。
或者,您可以从用户一次读取一个字符并立即对该字符执行操作。在这种情况下,您不需要声明数组。一个字符变量就足够了,您可以继续接受用户的数据。在这种情况下,请丢弃scanf()
并在while()
中,接受一个字符的getChar()
输出并执行操作。
P.S。你的while()中有一个小错误,在少数情况下会给你不正确的结果。