使用 putchar() 和 getchar() 打印单个字符
Using putchar() and getchar() to print individual characters
我正在尝试使用 putchar() 和 getchar() 从用户那里读取一串字符,然后我的循环将每个字符打印三次,打印一个新行,等等,直到每个变量 "userInput" 中的字符已被打印。当我尝试编译我的程序时,我收到以下错误:
warning: assignment makes pointer from integer without a cast [enabled by default]
userInput = getchar();
^
warning: comparison between pointer and integer [enabled by default]
while(counter < strlen(userInput))
^
error: array subscript is not an integer
putchar(userInput[counter]);
^
error: array subscript is not an integer
putchar(userInput[counter]);
^
error: array subscript is not an integer
putchar(userInput[counter]);
^
如何修复这些错误?我是 C 的新手,无法弄清楚指针转换错误的含义,以及为什么我的计数器变量不起作用。
我的代码如下:
#include <stdio.h>
#include <string.h>
#include <ctype.h>
int main(void)
{
char *userInput;
int *counter = 0;
printf("Enter a string of characters: ");
userInput = getchar();
while(counter < strlen(userInput))
{
putchar(userInput[counter]);
putchar(userInput[counter]);
putchar(userInput[counter]);
printf("\n");
counter++;
}
}
- getchar() return作为无符号整数的单个字符。您必须将其转换为 char 以避免警告。
- getchar return 一个 int,它不分配任何东西。
- 按照指示读取一个字符,因此您不能在其上循环。
我认为您应该在循环中搜索 fgets 或 scanf 或调用 getchar(),但您需要使用特定的字符退出循环。
我不太确定你为什么要这样做,但如果我必须这样做,我可能会这样做 -
01 #include <stdio.h>
02 int main()
03 {
04 char userInput[100],c;
05 int length, i=0;
06
07 printf("Enter a string of characters: ");
08 while(c=getchar()){
09 if(c=='\n')
10 break;
11 userInput[i++] = c;
12 }
13 userInput[i]='[=10=]';
14 length = i;
15
16 for(i=0; i<length; i++){
17 putchar(userInput[i]);
18 putchar(userInput[i]);
19 putchar(userInput[i]);
20 putchar('\n');
21 }
22 return 0;
23 }
为了更好地理解,我添加了行号。
这是我所做的 -
- 除了stdio.h,我不需要任何其他头文件,所以删除了额外的头文件。
- 您可能需要一个字符串(字符数组),因此您必须像第 04 行一样将其定义为字符数组。由于 getchar() returns 一个字符,将它分配给一个 char 指针会出错。此外,我声明了一个变量 "c",您稍后会看到它。
- 我使用的是标准 i,而不是计数器,并声明了一个可变长度来存储字符串长度。
- 第 08 行很有趣,while(c=getchar())。它的作用是,只要输入流中存在一个字符(由用户输入),它就会一直读取一个字符并将其存储在变量 c 中。
- 在第 09 行,我检查 c 是否包含换行符(即用户按下 Enter/Return 键)。如果是这样,我将停止读取字符串并在第 10 行使用 break 关键字退出循环。
- 在第 11 行,我将字符 c 存储在 userInput 数组的第 i 个索引处,同时递增 i。你可以在两行中做同样的事情。
- 在第 13 行中,i 的值将是输入字符串的长度。在最后一个索引处,我存储了一个特殊字符“\0”,它是空终止符。你可以查阅它以了解更多信息。
- 在第 14 行,我将 i 的值存储在 length 变量中。
- 从第 16-21 行开始,我 运行 一个简单的 for 循环,从 i=0 到 length,并且在每次迭代中,我根据需要打印字符 3 次。在第 20 行,我使用 putchar() 代替 printf() 来打印一个新行,因为 '\n' 是一个字符,只是为了向您展示。
这样就完成了你想要的任务。我尽量让它对初学者友好,对任何疑问发表评论。
乐意效劳。 :)
如果你想使用字符指针来存储数据,你要么需要有一个现有的字符串,你可以让这个字符指针指向,要么你需要动态分配一些字节,然后可以使用存储新数据。
char *string = malloc(50);
等同于
char string[50];
此外,如果您只存储单个值,则整数不需要是指针。所以它应该只是
int counter=0;
在你编写的程序中,
getchar() 只需要一个字符
你应该使用像gets(string)这样的字符串处理函数;
去做这个
它会让事情变得更容易
我正在尝试使用 putchar() 和 getchar() 从用户那里读取一串字符,然后我的循环将每个字符打印三次,打印一个新行,等等,直到每个变量 "userInput" 中的字符已被打印。当我尝试编译我的程序时,我收到以下错误:
warning: assignment makes pointer from integer without a cast [enabled by default]
userInput = getchar();
^
warning: comparison between pointer and integer [enabled by default]
while(counter < strlen(userInput))
^
error: array subscript is not an integer
putchar(userInput[counter]);
^
error: array subscript is not an integer
putchar(userInput[counter]);
^
error: array subscript is not an integer
putchar(userInput[counter]);
^
如何修复这些错误?我是 C 的新手,无法弄清楚指针转换错误的含义,以及为什么我的计数器变量不起作用。
我的代码如下:
#include <stdio.h>
#include <string.h>
#include <ctype.h>
int main(void)
{
char *userInput;
int *counter = 0;
printf("Enter a string of characters: ");
userInput = getchar();
while(counter < strlen(userInput))
{
putchar(userInput[counter]);
putchar(userInput[counter]);
putchar(userInput[counter]);
printf("\n");
counter++;
}
}
- getchar() return作为无符号整数的单个字符。您必须将其转换为 char 以避免警告。
- getchar return 一个 int,它不分配任何东西。
- 按照指示读取一个字符,因此您不能在其上循环。
我认为您应该在循环中搜索 fgets 或 scanf 或调用 getchar(),但您需要使用特定的字符退出循环。
我不太确定你为什么要这样做,但如果我必须这样做,我可能会这样做 -
01 #include <stdio.h>
02 int main()
03 {
04 char userInput[100],c;
05 int length, i=0;
06
07 printf("Enter a string of characters: ");
08 while(c=getchar()){
09 if(c=='\n')
10 break;
11 userInput[i++] = c;
12 }
13 userInput[i]='[=10=]';
14 length = i;
15
16 for(i=0; i<length; i++){
17 putchar(userInput[i]);
18 putchar(userInput[i]);
19 putchar(userInput[i]);
20 putchar('\n');
21 }
22 return 0;
23 }
为了更好地理解,我添加了行号。 这是我所做的 -
- 除了stdio.h,我不需要任何其他头文件,所以删除了额外的头文件。
- 您可能需要一个字符串(字符数组),因此您必须像第 04 行一样将其定义为字符数组。由于 getchar() returns 一个字符,将它分配给一个 char 指针会出错。此外,我声明了一个变量 "c",您稍后会看到它。
- 我使用的是标准 i,而不是计数器,并声明了一个可变长度来存储字符串长度。
- 第 08 行很有趣,while(c=getchar())。它的作用是,只要输入流中存在一个字符(由用户输入),它就会一直读取一个字符并将其存储在变量 c 中。
- 在第 09 行,我检查 c 是否包含换行符(即用户按下 Enter/Return 键)。如果是这样,我将停止读取字符串并在第 10 行使用 break 关键字退出循环。
- 在第 11 行,我将字符 c 存储在 userInput 数组的第 i 个索引处,同时递增 i。你可以在两行中做同样的事情。
- 在第 13 行中,i 的值将是输入字符串的长度。在最后一个索引处,我存储了一个特殊字符“\0”,它是空终止符。你可以查阅它以了解更多信息。
- 在第 14 行,我将 i 的值存储在 length 变量中。
- 从第 16-21 行开始,我 运行 一个简单的 for 循环,从 i=0 到 length,并且在每次迭代中,我根据需要打印字符 3 次。在第 20 行,我使用 putchar() 代替 printf() 来打印一个新行,因为 '\n' 是一个字符,只是为了向您展示。
这样就完成了你想要的任务。我尽量让它对初学者友好,对任何疑问发表评论。 乐意效劳。 :)
如果你想使用字符指针来存储数据,你要么需要有一个现有的字符串,你可以让这个字符指针指向,要么你需要动态分配一些字节,然后可以使用存储新数据。
char *string = malloc(50);
等同于
char string[50];
此外,如果您只存储单个值,则整数不需要是指针。所以它应该只是
int counter=0;
在你编写的程序中, getchar() 只需要一个字符
你应该使用像gets(string)这样的字符串处理函数; 去做这个 它会让事情变得更容易