我尝试手动计算字符串中的字符数,包括任何空格。我编码了这个:
#include <stdio.h>
#include <stdlib.h>
void Unos(char* string, int duzina)
{
int i=0;
char c;
do {
c=getchar();
string[i]=c;
i++;
} while(c != '\n' && i<duzina);
}
int brojznak(char* str)
{
int i=0,br=0;
while(*str++ != '\0')
{
br++;
}
return br;
}
int main()
{
char recenica[100];
printf("Unesite recenicu\n");
Unos(recenica,100);
int i=0;
printf("%d",brojznak(recenica));
return 0;
}
此代码无法正常运行,但我认为应该如此。另一方面,如果我们改变条件:
int brojznak(char* str)
{
int i=0,br=0;
while(*str++ != '\0')
{
br++;
}
return br;
}
它有时会再打印一些随机字符,但要准确计算。谁能告诉我这段代码有什么问题?
答案 0 :(得分:2)
Unos()
中缺少字符串终止。
while(*str++ != '\0')
中的 brojznak()
不知道何时停止。
void Unos(char* string, int duzina) {
int i=0;
char c;
do {
c = getchar();
string[i] = c;
i++;
} while(c != '\n' && (i + 1) <duzina); // Insure enough room
string[i]='\0'; // add this
}
其他一些改进:
void Unos2(char* string, size_t duzina) {
size_t i = 0;
while ((i+1) < duzina) { Only attempt to read if space allows it.
int c = getchar(); // Use int to distinguish EOF from characters
if (c == EOF) break;
string[i] = c;
i++;
if (c == '\n') break;
}
string[i] = '\0'; // add this
}
答案 1 :(得分:0)
试试这个
for(i=0; getchar()!='\n'; ++i)
;