我是C的新手。我想创建一个程序,用户可以使用数字填充数组,将特定数字设置到某个数组寄存器或读取寄存器的值。 除了阅读价值之外,一切都有效。我总是得到一个0,为什么? 这是我的getValue();
代码void getValues(int getArray[]){
fflush(stdin);
printf("which slot do you want to read?\n");
gvinput = getchar();
ptr = getArray[gvinput];
printf("The value is: %d \n",ptr);
start();
}
这是整个代码..
#include <stdio.h>
#include <stdlib.h>
int* ptr;
int list[200];
int x = 0;
int i = 0; // variable used by for-Loop in setList
int j = 0; // variable used by for-Loop in getList
int c; // C used for new Game
int input;
int g1; //Value for getValue
int option; //start Value
int gvinput;
int main()
{
start();
return 0;
}
void setList(int sizeOfList)
{
for (i = x; i <= sizeOfList; i++)
{
list[i] = i;
}
}
void getList()
{
for(j = x; j < i ; j++ )
{
printf("At %d we got the value %d with the adress %d\n",j,list[j],&list[j]);
}
}
void startList()
{
fflush(stdin);
printf("Please enter number between 0 and 30\n ");
scanf("%d",&input);
if(input > 30 || input == 0)
{
printf("The Number is not between 0 and 30\n");
startList();
}
setList(input);
getList();
fflush(stdin);
start();
}
void setValues(int l[])
{
fflush(stdin);
int v;
int loc;
printf("please enter what value you want to safe\n");
scanf("%d",&v);
fflush(stdin);
printf("Where do you want to save it?\n");
scanf("%d",&loc);
l[loc] = v;
printf("we got at slot %d the value %d\nThe Adress is: %d.",loc,l[loc],&l[loc]);
start();
}
void getValues(int getArray[]){
fflush(stdin);
printf("which slot do you want to read?\n");
gvinput = getchar();
ptr = getArray[gvinput];
printf("The value is: %d \n",ptr);
start();
}
void start(){
fflush(stdin);
printf("[L] = generate Slots\n");
printf("[S] = set a Value at specific slot\n");
printf("[G] = get a Value from a specific slot\n");
option=getchar();
if(option == 'L'){
startList();
}
if(option == 'S'){
setValues(list);
}
if (option =='G'){
getValues(list);
}
}
如果有人可以提供帮助并给出提示,会很棒
答案 0 :(得分:1)
使用getchar()
使您的程序彻底混淆。当您按下 G Enter 等键时,会从getchar()
返回两个字符。第一个电话会返回'G'
,然后您下次拨打getchar()
时,会返回'\n'
(输入密钥)。
要解决此问题,请使用以下代码替换对getchar()
的调用:
char buf[80];
fgets(buf, sizeof(buf), stdin);
option = buf[0];
对fgets()
的调用将获得整行文本,包括 Enter 按键,然后option = buf[0];
提取该行上键入的第一个字符。
执行此操作后,您可以删除技术上(根据C标准)未定义行为的所有fflush(stdin)
,并且不会真正执行您想要的操作。
编辑:您也希望对scanf()
的来电也这样做。该功能根本不适合交互式使用。如上所述使用fgets()
,然后调用atoi()
将输入的字符串转换为int。
另一个编辑:您正在使用
gvinput = getchar();
指定键入gvinput
的字符的 ASCII值。如果您输入4
,则gvinput
将获得52,而不是4.使用您在setValues()
中使用的相同方法获取loc
的值。
答案 1 :(得分:0)
void getValues(int getArray[]){
fflush(stdin);
printf("which slot do you want to read?\n");
scanf("%d",&gvinput);
fflush(stdin);
printf("The value is: %d \n",getArray[gvinput]);
start();
}
这是正确的代码以防万一