本人初学C;所以,请放轻松。 :)
我正在尝试编写一个非常简单的程序,将字符串中的每个单词放入“Hi(输入)!”句子(假设您输入姓名)。另外,我正在使用数组,因为我需要练习它们。
我的问题是,一些垃圾被放入某个地方的数组中,它弄乱了程序。我试图找出问题所在,但无济于事;所以,是时候寻求专家的帮助了。我哪里出错了?
p.s.: 也有某处出现死循环,但很可能是数组中放入垃圾的结果。
#include <stdio.h>
#define MAX 500 //Maximum Array size.
int main(int argc, const char * argv[])
{
int stringArray [MAX];
int wordArray [MAX];
int counter = 0;
int wordCounter = 0;
printf("Please type in a list of names then hit ENTER:\n");
// Fill up the stringArray with user input.
stringArray[counter] = getchar();
while (stringArray[counter] != '\n') {
stringArray[++counter] = getchar();
}
// Main function.
counter = 0;
while (stringArray[wordCounter] != '\n') {
// Puts first word into temporary wordArray.
while ((stringArray[wordCounter] != ' ') && (stringArray[wordCounter] != '\n')) {
wordArray[counter++] = stringArray[wordCounter++];
}
wordArray[counter] = '\0';
//Prints out the content of wordArray.
counter = 0;
printf("Hi ");
while (wordArray[counter] != '\0') {
putchar(wordArray[counter]);
counter++;
}
printf("!\n");
//Clears temporary wordArray for new use.
for (counter = 0; counter == MAX; counter++) {
wordArray[counter] = '\0';
}
wordCounter++;
counter = 0;
}
return 0;
}
解决了!当我递增 wordCounter 时,我需要将以下 if 句子添加到末尾。 :)
if (stringArray[wordCounter] != '\n') {
wordCounter++;
}
最佳答案
您正在使用 int
数组来表示字符串,可能是因为 getchar()
在 int
中返回。但是,字符串最好表示为 char
数组,因为在 C 中它们就是这样。getchar()
返回 int
的事实是肯定令人困惑,这是因为它需要能够返回特殊值 EOF
,这不适合 char
。因此它使用 int
,这是一种“更大”的类型(能够表示更多不同的值)。因此,它可以适合所有 char
值,和 EOF
。
有了char
数组,就可以直接使用C的字符串函数了:
char stringArray[MAX];
if(fgets(stringArray, sizeof stringArray, stdin) != NULL)
printf("You entered %s", stringArray);
请注意,fscanf()
会在字符串中保留行尾字符,因此您可能希望将它们去掉。我建议实现一个就地函数来去除前导和尾随空格,这也是一个很好的练习。
关于c - 如何在 C 中解析字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13230253/